บทที่ 15. การทำงานกับไฟล์
ในบทเรียนนี้เราจะมาดูกันอย่างมาก หัวข้อสำคัญในการเขียนโปรแกรม - ทำงานกับไฟล์
ในเกือบทุกโปรแกรม คุณต้องคัดลอก เปิด เปลี่ยนแปลง บันทึก และบางครั้งก็ลบไฟล์
อย่างที่คุณทราบไฟล์มี รูปแบบต่างๆและนำไปใช้กับพวกเขา โปรแกรมต่างๆสำหรับการประมวลผล เช่น ไฟล์รูปภาพ BMP ข้อความ ไฟล์ TXTฯลฯ ไฟล์ต่างๆ มีชื่อและนามสกุลต่างกันออกไปซึ่งมี สภาพแวดล้อม MS-DOSสูงสุดสามตัวอักษร หากไฟล์มีนามสกุล RAR แสดงว่าผู้ใช้และ ระบบปฏิบัติการรู้ว่านี่คือผู้จัดเก็บ และ windows ใช้เครื่องมือที่ระบุใน ส่วนพิเศษรีจิสทรี
การคัดลอกไฟล์
ฟังก์ชั่น CopyFile ใช้สำหรับคัดลอกไฟล์ รูปแบบของมันเป็นดังนี้:
CopyFile(Source_file, Write_file, Overwrite_flag);
โดยที่: Source_file – เส้นทางเต็มและชื่อของไฟล์ที่กำลังคัดลอก
Write_file – เส้นทางแบบเต็มและชื่อของไฟล์ที่คัดลอกไฟล์ต้นฉบับ
Overwrite_flag - ไม่ว่าไฟล์จะถูกเขียนทับหรือไม่หากมีอยู่แล้ว (จริง - จะไม่เป็น, เท็จ - มันจะถูกเขียนทับ)
CopyFile เป็นฟังก์ชันที่ส่งคืนค่าสถานะไม่ว่าการดำเนินการคัดลอกจะสำเร็จหรือไม่ก็ตาม
ตัวอย่างเช่น บรรทัดต่อไปนี้:
ถ้าไม่ใช่ CopyFile("c:\command.com","c:\1.com",true) ให้แสดง ShowMessage("ข้อผิดพลาดในการคัดลอก");
จะคัดลอกไฟล์ command.com ไปยังไฟล์ 1.com เฉพาะในกรณีที่ไม่มีไฟล์หลังมิฉะนั้นจะแสดงข้อความแสดงข้อผิดพลาดในการคัดลอก
การย้ายไฟล์
ฟังก์ชั่น MoveFile ใช้ในการย้ายไฟล์ เธอมี รูปแบบถัดไป:
MoveFile(แหล่งที่มา_ไฟล์, Write_file);
พารามิเตอร์ของมันคล้ายกับคำสั่งข้างต้น ยกเว้นในกรณีที่ไม่มีแฟล็กเขียนใหม่
ถ้าไม่ใช่ MoveFile("c:\1.com","c:\2.com") ก็ให้ ShowMessage("ย้ายผิดพลาด");
การเปลี่ยนชื่อไฟล์
ฟังก์ชันเปลี่ยนชื่อไฟล์
ถ้าไม่ใช่ RenameFile("c:\2.com","c:\3.com") ก็ให้ ShowMessage("Rename error");
คำสั่งข้างต้นทั้งหมดมีค่าเริ่มต้นและ ไฟล์สุดท้ายเป็นประเภท PChar นี้ ประเภทสตริงสิ้นสุดด้วยค่า null คุณอาจเคยได้ยินเกี่ยวกับรูปแบบข้อมูลสตริงนี้มาก่อน คุณสามารถใส่สตริงในตัวแปรดังกล่าวได้มาก- ขนาดของมันถูกจำกัดด้วยการมีไบต์ว่างต่อท้าย ตามทฤษฎีแล้ว ตัวแปรดังกล่าวสามารถมีขนาดไม่สิ้นสุดได้ ในทางปฏิบัติ จะถูกจำกัดด้วยขนาดของหน่วยความจำที่จัดสรรสำหรับโปรแกรม (2GB)
แปลงร่างเป็นปกติ ตัวแปรสตริง, ประเภทสตริงใน PChar ผลิตโดยฟังก์ชัน:
PChar(String_variable)
ขณะเดียวกันสำหรับทีม การดำเนินการไฟล์สามารถต่อสายอักขระเข้าด้วยกันได้ ตัวอย่างเช่น:
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
วาร์ InDir, OutDir:String; //การประกาศตัวแปรสตริง
เริ่ม
InDir:="c:\1\"; // ไดเร็กทอรี ไฟล์ต้นฉบับ
OutDir:="c:\2\"; // ไดเร็กทอรีของไฟล์ที่จะเขียน
CopyFile(PChar(InDir+"1.txt"),PChar(OutDir+"1.txt"),เท็จ);
CopyFile(PChar(InDir+"2.txt"),PChar(OutDir+"2.txt"),เท็จ);
จบ;
ที่นี่เรามีการดำเนินการเชื่อมโยงตัวแปรสตริงสองตัวเข้าด้วยกัน
ผลลัพธ์ของขั้นตอนนี้คือการคัดลอกไฟล์ c:\1\1.txt และ c:\1\2.txt ไปยังไดเร็กทอรี c:\2 ไฟล์จะถูกคัดลอกภายใต้ชื่อเดียวกัน
กำลังลบไฟล์
ฟังก์ชั่น DeleteFile
ถ้าไม่ใช่ DeleteFile("c:\3.com") ให้แสดง ShowMessage("Delete error");
การทำงานกับไฟล์ข้อความ อ่านจากไฟล์ข้อความ
ในบทเรียนก่อนหน้านี้ ในองค์ประกอบ Memo เราได้ดำเนินการโหลดและเขียนไฟล์ข้อความดังต่อไปนี้:
Memo1.Lines.SaveToFile(ชื่อไฟล์);
// บันทึก
ทั้งหมดนี้ต้องขอบคุณคุณสมบัติ Lines ซึ่งจัดเก็บเส้นต่างๆ
ตัวอย่างการประมวลผลไฟล์ข้อความต่อไปนี้คล้ายกับตัวอย่างใน Pascal มากคนมีความรู้
อาจรู้สึกถึงความแตกต่างเนื่องจากมีความแตกต่างบางประการ
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
วาร์ฟ:TextFile; // ประกาศตัวแปรไฟล์ เซนต์:สตริง
เริ่ม
- // ตัวแปรสตริง
AssignFile(f,"c:\1.txt"); // ผูกชื่อไฟล์กับตัวแปรไฟล์
($I-) // ปิดการใช้งานการตรวจสอบข้อผิดพลาด I/O
รีเซ็ต(ฉ); // เปิดไฟล์เพื่ออ่าน
($I+) // เปิดใช้งานการตรวจสอบข้อผิดพลาด I/O<>0 ถ้าIOResultแล้ว //ถ้ามีข้อผิดพลาดในการเปิด
เริ่ม
, ที่
ShowMessage("เกิดข้อผิดพลาดในการเปิดไฟล์ C:\1.TXT");
ออก; // ออกจากโพรซีเดอร์หากมีข้อผิดพลาดในการเปิดไฟล์;
จบ ในขณะที่ไม่ อีโอเอฟ(ฉ)ทำ // ยังจุดสิ้นสุดของไฟล์
เริ่ม
ทำวง:
ออก; // ออกจากโพรซีเดอร์หากมีข้อผิดพลาดในการเปิดไฟล์;
แสดงข้อความ(st); // ส่งออกสตริงไปยังผู้ใช้
จบ;
ปิดไฟล์(f); //ปิดไฟล์
ฉันขอแสดงความคิดเห็นในบางบรรทัดของตัวอย่างนี้ คำสั่ง AssignFile จะผูกสตริงพาธของไฟล์เข้ากับตัวแปรของไฟล์ การดำเนินการเพิ่มเติมทั้งหมดกับตัวแปรไฟล์จะดำเนินการโดยอัตโนมัติไฟล์ที่ระบุ
($I-) และ ($I+) เป็นคำสั่งสำหรับคอมไพลเลอร์เพื่อปิดใช้งานและเปิดใช้งานการตรวจสอบข้อผิดพลาด I/O ณ จุดนี้ตามลำดับ ในกรณีนี้ หากพยายามเปิดไฟล์ c:\1.txt ไม่สำเร็จ (ไฟล์หายไปหรือเปิดให้เขียนโดยโปรแกรมอื่น) โปรแกรมของเราจะไม่สร้างข้อผิดพลาดฉุกเฉินและจะดำเนินการตามขั้นตอนนี้ต่อไป คุณสมบัตินี้มีประโยชน์สำหรับการจัดการทั้งหมดกรณีที่เป็นไปได้
ในการทำงานของโปรแกรม
IOResult เป็นตัวแปรที่เก็บรหัสข้อผิดพลาดของการดำเนินการ I/O ครั้งล่าสุด หากเป็นศูนย์ แสดงว่าการดำเนินการครั้งล่าสุดเสร็จสมบูรณ์แล้ว
EOF(File) – ฟังก์ชันที่ส่งคืนเครื่องหมายสิ้นสุดไฟล์ เหล่านั้น. แสดงว่าถึงจุดสิ้นสุดของไฟล์ที่เปิดอยู่หรือไม่
ReadLn(ไฟล์, ตัวแปร) – ขั้นตอนการอ่านตัวแปรจากไฟล์ ตรงกันข้ามกับคำสั่ง Read โดยจะอ่านบรรทัดที่ลงท้ายด้วยอักขระขึ้นบรรทัดใหม่ภายใต้รหัส 13 และ 10 (ปุ่ม Enter)
CloseFile(File) – ขั้นตอนในการปิดไฟล์ที่เปิดไว้ก่อนหน้านี้
การทำงานกับไฟล์ข้อความ การเขียนลงในไฟล์ข้อความ
ลองดูตัวอย่าง:
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
ตัวแปร f:TextFile; // ชี้ไปที่ไฟล์ข้อความ
AssignFile(f,"c:\1.txt");
//ผูกชื่อกับตัวแปร<>0 ผนวก(ฉ);// เปิดไฟล์เพื่อเพิ่ม
ถ้า IOResult แล้ว //
//ผูกชื่อกับตัวแปร<>หากมีข้อผิดพลาดในการเปิด (เช่น ไม่มีไฟล์)
เขียนใหม่(ฉ);
// สร้าง
ไฟล์ใหม่
0 แล้ว // เกิดข้อผิดพลาดในการสร้างไฟล์
ShowMessage("เกิดข้อผิดพลาดในการสร้างไฟล์ C:\1.TXT");
WriteLn(f,"สวัสดี");
// เขียนสตริงด้วยอักขระขึ้นบรรทัดใหม่ลงในไฟล์
ปิดไฟล์(f);//ปิดไฟล์
ขั้นตอนการผนวกจะเปิดไฟล์สำหรับเขียนและตั้งค่าตัวชี้การเขียนไปที่ส่วนท้ายของไฟล์ เช่น ทุกบรรทัดที่เพิ่มลงในไฟล์จะถูกเขียนที่ส่วนท้ายของไฟล์ในกรณีของเรา ที่จุดเริ่มต้นของไฟล์ 1.txt อาจไม่อยู่ในดิสก์ ดังนั้นคำสั่งให้เปิดไฟล์เพื่อต่อท้ายจะทำให้เกิดข้อผิดพลาด ในกรณีนี้ การตรวจสอบข้อผิดพลาดของเราเองจะถูกทริกเกอร์และคำสั่งการสร้างไฟล์จะถูกดำเนินการ การเขียนและการอ่านข้อมูลที่ไม่ใช่ข้อความจากไฟล์ ลองพิจารณาตัวอย่างที่เมื่อออกโปรแกรมจะบันทึกขนาดและตำแหน่งของหน้าต่างบนหน้าจอลงในไฟล์ และเมื่อเรียกใช้ในภายหลัง จะคืนค่าสถานะที่มีเมื่อออก โปรแกรมประกอบด้วยสองขั้นตอน OnShow และ OnClose สำหรับหน้าต่าง Form1 ของโปรแกรมขั้นตอน
TForm1.FormShow (ผู้ส่ง: TObject);
เริ่ม
วาร์
ฉ:
ไฟล์
ของ
จำนวนเต็ม; // ตัวแปรไฟล์ พิมพ์จำนวนเต็มฉัน:จำนวนเต็ม; //ตัวแปรจำนวนเต็ม<>0 ถ้าIOResult AssignFile(f,"pos.ini");
($ฉัน-)
รีเซ็ต(ฉ);
Form1.ซ้าย:=i; // ตำแหน่งหน้าต่างด้านซ้าย
รีเซ็ต(ฉ);
Form1.ความกว้าง:=i; // ความกว้างของหน้าต่าง
รีเซ็ต(ฉ);
Form1.ความสูง:=i; // ความสูงของหน้าต่าง
ปิดไฟล์(f);
ออก; // ออกจากโพรซีเดอร์หากมีข้อผิดพลาดในการเปิดไฟล์;
ปิดไฟล์(f); TForm1.FormClose (ผู้ส่ง: TObject; varการดำเนินการ: TCloseAction);
ขั้นตอนการผนวกจะเปิดไฟล์สำหรับเขียนและตั้งค่าตัวชี้การเขียนไปที่ส่วนท้ายของไฟล์ เช่น ทุกบรรทัดที่เพิ่มลงในไฟล์จะถูกเขียนที่ส่วนท้ายของไฟล์ในกรณีของเรา ที่จุดเริ่มต้นของไฟล์ 1.txt อาจไม่อยู่ในดิสก์ ดังนั้นคำสั่งให้เปิดไฟล์เพื่อต่อท้ายจะทำให้เกิดข้อผิดพลาด ในกรณีนี้ การตรวจสอบข้อผิดพลาดของเราเองจะถูกทริกเกอร์และคำสั่งการสร้างไฟล์จะถูกดำเนินการ การเขียนและการอ่านข้อมูลที่ไม่ใช่ข้อความจากไฟล์ ลองพิจารณาตัวอย่างที่เมื่อออกโปรแกรมจะบันทึกขนาดและตำแหน่งของหน้าต่างบนหน้าจอลงในไฟล์ และเมื่อเรียกใช้ในภายหลัง จะคืนค่าสถานะที่มีเมื่อออก โปรแกรมประกอบด้วยสองขั้นตอน OnShow และ OnClose สำหรับหน้าต่าง Form1 ของโปรแกรมจำนวนเต็ม;
แม้ว่า Delphi จะมีหลายวิธีที่ช่วยให้คุณสามารถโต้ตอบกับไฟล์ได้ แต่เทคโนโลยีการทำงานจำเป็นต้องปฏิบัติตามลำดับการดำเนินการบางอย่าง:
1. ไฟล์จะต้องเปิดอยู่ แอปพลิเคชันอื่นไม่ควรรบกวนการทำงานกับไฟล์ ระบบจะตรวจสอบสิ่งนี้อย่างระมัดระวัง ในขณะเดียวกัน ระบบจะกำหนดวัตถุประสงค์ในการเปิดไฟล์ มีหลายตัวเลือกที่นี่: อ่านหรือทำการเปลี่ยนแปลง
หลังจากสร้างหรือเปิดเอกสารแล้ว ระบบจะได้รับตัวระบุพิเศษ ซึ่งจะถูกใช้เป็นตัวชี้ไปยังไฟล์นี้ในขั้นตอนการประมวลผลที่ตามมาทั้งหมด
3. หลังจากทุกอย่าง การดำเนินการที่จำเป็นถูกดำเนินการและไฟล์ถูกเขียน เอกสารจะถูกปิด นับจากนี้เป็นต้นไป จะสามารถใช้งานได้กับแอปพลิเคชันอื่นโดยสมบูรณ์โดยไม่มีข้อจำกัด เป็นที่น่าสังเกตว่าการปิดไฟล์รับประกันว่าการเปลี่ยนแปลงทั้งหมดที่ทำจะถูกบันทึก ดังนั้น, เข้าสู่ ไฟล์เดลฟีข้อมูลที่จำเป็นเสร็จสมบูรณ์แล้ว.
ถ้า งานนี้ดูเหมือนจะค่อนข้างซับซ้อน คุณสามารถขอความช่วยเหลือจากผู้เชี่ยวชาญที่นอกเหนือจาก Delphi แล้ว ยังรู้ทุกสิ่งที่จำเป็นเกี่ยวกับการดูแลระบบ Linux
เขียนลงในไฟล์ข้อความ Delphi
ใน Delphi ไฟล์จะแสดงเป็นลำดับข้อมูลประเภทเดียวกัน กล่าวอีกนัยหนึ่งก็เพียงพอแล้ว อาร์เรย์ขนาดใหญ่ซึ่งมีขนาดที่ไม่จำกัดในทางปฏิบัติ เพื่อให้ง่ายต่อการเขียนลงในไฟล์ข้อความ Delphi แต่ละเอกสารจะถูกแสดงเป็นตัวแปรไฟล์ที่จะทำงานร่วมกับ เอกสารข้อความมีการใช้ประเภท TextFile ซึ่งเขียนดังนี้:
ตัวแปร Var: พิมพ์ TextFile;
หากต้องการเข้าถึงไฟล์ ให้ใช้ขั้นตอน กำหนดไฟล์()- เมื่อเข้าถึงไฟล์ได้แล้ว ก็สามารถเปิดไฟล์ได้ตามขั้นตอน รีเซ็ต เขียนใหม่- ขั้นตอนโดยละเอียดยิ่งขึ้น รีเซ็ต()เปิดเอกสารที่สร้างไว้ก่อนหน้านี้และขั้นตอน เขียนใหม่()ช่วยให้คุณสร้างไฟล์ใหม่หรือล้างไฟล์ที่มีอยู่ ไฟล์ถูกปิดโดยใช้ขั้นตอน CloseFile พิเศษ คุณสามารถเขียนลงในไฟล์ข้อความ Delphi โดยใช้ขั้นตอนต่างๆ เช่น Write หรือ WriteLn
การบันทึกใน Excel
ในกรณีที่จำเป็นต้องบันทึกเข้า เก่งเดลฟีคุณต้องใช้อัลกอริธึมของการกระทำบางอย่าง ขั้นแรก สร้างอาร์เรย์ตัวแปร จากนั้นจึงป้อนข้อมูลลงในอาร์เรย์นี้ และอาร์เรย์ทั้งหมดนี้จะถูกเขียนลงไปโดยใช้การดำเนินการเพียงครั้งเดียว ไฟล์ Excel- เป็นที่น่าสังเกตว่าการบันทึกใน Excel มีความเกี่ยวข้องมาก เมื่อเร็วๆ นี้เนื่องจากตัวแก้ไขนี้ใช้กันอย่างแพร่หลายในการพัฒนารายงานและแบบฟอร์มสิ่งพิมพ์ต่างๆบทความนี้มุ่งเป้าไปที่ผู้เริ่มต้นที่ต้องการเรียนรู้วิธีทำงานกับไฟล์ใน Delphi บทความนี้กล่าวถึงการดำเนินการ I/O มาตรฐานกับไฟล์ ข้อผิดพลาดทั่วไปและวิธีการป้องกัน
ใน Delphi ไฟล์จะแสดงเป็นโครงสร้างข้อมูลที่มีชื่อ เช่น ลำดับของข้อมูลประเภทเดียวกัน โดยคร่าวแล้ว นี่เป็นอาร์เรย์ขนาดใหญ่ จำนวนองค์ประกอบที่แทบไม่มีขีดจำกัด เพื่อให้ง่ายต่อการทำงานกับไฟล์ใน Delphi แต่ละตัว แยกไฟล์แสดงถึงตัวแปรไฟล์ เนื่องจากเป็นตัวแปรจึงต้องประกาศเป็นตัวแปร อย่างไรก็ตามสิ่งแรกสุดก่อน
ขั้นตอนที่ 1 - การประกาศตัวแปรไฟล์
ตัวแปรไฟล์ใน มุมมองทั่วไปประกาศในส่วน var ไว้ดังนี้:
F: ไฟล์ประเภท;
ตัวอย่างเช่น:
F: ไฟล์จำนวนเต็ม;
ควรสังเกตว่าไฟล์ข้อความได้รับการประกาศแตกต่างออกไปเล็กน้อย:
และโดยทั่วไปแล้ว ไฟล์ข้อความจะเป็น "พิเศษ" ฟังก์ชันบางอย่างใช้งานได้กับไฟล์ข้อความเท่านั้น คุณยังสามารถประกาศไม่เพียงแต่ไฟล์จำนวนเต็ม ไฟล์ข้อความ หรือไฟล์ประเภทอื่น แต่ยังรวมถึงไฟล์ประเภทหรือบันทึกของคุณเองด้วยการวางการประกาศประเภทหรือบันทึกไว้เหนือการประกาศตัวแปรไฟล์ ตัวอย่างเช่น:
TDay = (จันทร์ อังคาร พุธ พฤหัสบดี ศุกร์ เสาร์ อาทิตย์);
F: ไฟล์ของ TDay;
F: ไฟล์ของ TDay;
โปรดทราบว่าต้องกำหนดความยาวของฟิลด์สตริงในบันทึกอย่างชัดเจน (ชื่อ: สตริง)
ขั้นตอนที่ 2 - การกำหนดและการเปิดไฟล์
หลังจากประกาศตัวแปรไฟล์แล้ว คุณจะต้องเชื่อมโยงตัวแปรนั้นด้วย ไฟล์ฟิสิคัลบนดิสก์ ซึ่งสามารถทำได้โดยใช้ขั้นตอน AssignFile:
AssignFile(var F: ไฟล์; ชื่อไฟล์: สตริง);
ตัวอย่างเช่น:
var F: ไฟล์ข้อความ;
AssignFile(F, "text.txt");
หลังจากเสร็จสิ้นขั้นตอนแล้ว ตัวแปรไฟล์ F จะเชื่อมโยงกับไฟล์ text.txt ที่อยู่ในโฟลเดอร์โปรแกรม และการกระทำทั้งหมดที่ทำกับตัวแปรจะมีผลกับไฟล์นี้ อย่างไรก็ตาม ตัวแปรสามารถปล่อยว่างเพื่อใช้งานต่อไปกับไฟล์อื่นได้โดยใช้ขั้นตอน CloseFile แต่มีข้อมูลเพิ่มเติมด้านล่าง ตอนนี้คุณต้องเปิดไฟล์ด้วยวิธีใดวิธีหนึ่งจากหลายวิธี ขึ้นอยู่กับความต้องการของคุณ คุณสามารถสร้างรายการใหม่หรือเขียนทับรายการที่มีอยู่โดยใช้ขั้นตอน Rewrite(F) คุณสามารถเปิดเขียนต่อท้ายไฟล์ได้โดยใช้ขั้นตอน Append(F) และการเปิดไฟล์เพื่ออ่านจะดำเนินการโดยขั้นตอนการรีเซ็ต
ขั้นตอนที่ 3 - การดำเนินการ I/O มาตรฐานพร้อมไฟล์
I/O คือการดำเนินการอินพุต/เอาต์พุต ที่นี่เราจะดูการเขียนข้อมูลลงไฟล์และอ่านข้อมูลนั้น การบันทึกก่อน คุณสามารถเขียนตัวแปรหรือค่าคงที่ลงในไฟล์ประเภทที่ไฟล์นั้นถูกประกาศได้ ตัวอย่างเช่น หากไฟล์ถูกประกาศในลักษณะ F: File of Integer จะสามารถเขียนได้เฉพาะข้อมูลประเภท Integer เท่านั้น หากคุณพยายามเขียนข้อมูลประเภทอื่น คอมไพลเลอร์จะสร้างข้อความแสดงข้อผิดพลาด การเขียนไฟล์จะดำเนินการโดยขั้นตอน Write(; P1; [...,Pn]) และ WriteLn(; P1; [...,Pn]) ส่วนที่สองแตกต่างจากอันแรกคือหลังจากเขียนพารามิเตอร์แล้ว มันจะย้ายแคร่ไปที่บรรทัดใหม่นั่นคือ พารามิเตอร์ถัดไปจะถูกเขียนขึ้นบรรทัดใหม่ นี่คือตัวอย่างการใช้ขั้นตอน:
var F: ไฟล์ข้อความ;
Str:= "ข้อความบางส่วน";
WriteLn(F, Str);
เขียน(F, "สิ่งนี้จะอยู่ในหุ้นใหม่");
write(F, "และนี่คือบรรทัดเดียวกัน");
อ่านข้อมูลโดยใช้ขั้นตอน Read(; V1; [...,Vn]) และ ReadLn(; V1; [...,Vn]) ความแตกต่างคือหลังจากอ่านพารามิเตอร์โดยขั้นตอน ReadLn แล้ว แคร่จะเลื่อนไปที่บรรทัดใหม่ แม้ว่าจะยังมีข้อมูลอยู่ก็ตาม นี่คือตัวอย่าง:
var F: ไฟล์ข้อความ;
ReadLn(F, Str2);//str2 จะมีข้อมูลที่ตามมาหลังจาก str
Read(F, Str3);//str3 จะมีข้อมูลที่อยู่บนบรรทัดใหม่หลัง str2
ฉันคิดว่ามันไม่ได้ซับซ้อนขนาดนั้น
ขั้นตอนที่ 4 - ปิดไฟล์
ตัวแปรไฟล์จะต้องถูกปล่อยหลังการใช้งาน มิฉะนั้นโปรแกรมจะไม่ปิดและจะสร้างข้อผิดพลาด นอกจากนี้ การเพิ่มตัวแปรไฟล์จะมีประโยชน์เมื่อคุณต้องการทำงานกับไฟล์หลายไฟล์ตามลำดับ และหลังจากทำงานกับไฟล์แรกแล้ว คุณสามารถปล่อยตัวแปรและเชื่อมโยงกับไฟล์ใหม่ได้ ขั้นตอน CloseFile(F: File) จะปล่อยตัวแปรไฟล์ ฉันคิดว่าไม่จำเป็นต้องเป็นตัวอย่างเพราะ... เธอไม่มีคุณสมบัติพิเศษ
ฉันคิดว่ายังคงเป็นเรื่องยากสำหรับผู้เริ่มต้นที่จะเข้าใจวิธีทำงานกับไฟล์โดยไม่มีตัวอย่าง ลองมาดูกัน ตัวอย่างที่ง่ายที่สุดโปรแกรมที่เมื่อคลิกปุ่มจะแจ้งให้ผู้ใช้ระบุชื่อไฟล์และบันทึกเนื้อหาของ TMemo และเมื่อคุณกดปุ่มอื่น โปรแกรมจะขอชื่อไฟล์อีกครั้ง อ่านข้อมูลที่บันทึกไว้จากที่นั่น และวางลงใน TMemo ฉันรู้ว่าการเขียนและการอ่านใน TMemo สามารถจัดระเบียบได้โดยใช้วิธีการพิเศษ แต่นี่เป็นเพียงตัวอย่างสำหรับบทความนี้ โดยทั่วไป ให้ส่ง TMemo หนึ่งปุ่มและสองปุ่มบนแบบฟอร์ม เปลี่ยนตัวจัดการปุ่มแรกเป็นรูปแบบนี้:
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
ชื่อไฟล์: สตริง;
AssignFile(F, ชื่อไฟล์);
สำหรับ i:= 0 ถึง Memo1.Lines.Count ทำ
WriteLn(F, Memo1.Lines[i]);
ปุ่มนี้จะบันทึกไฟล์ข้อความ ดังนั้นในส่วน var ฉันได้ประกาศตัวแปรท้องถิ่นสามตัวแปร: ประเภท F TextFile คือตัวแปรไฟล์สำหรับไฟล์ข้อความ FileName ประเภท String จะทำหน้าที่จัดเก็บชื่อไฟล์ และ i เป็นประเภท Integer - สำหรับลูป ในบรรทัดแรก ฉันขอชื่อไฟล์จากผู้ใช้ ประการที่สอง ฉันเชื่อมโยงตัวแปรไฟล์กับไฟล์ฟิสิคัลบนดิสก์ บรรทัด Rewrite(F) จะสร้างไฟล์ใหม่หรือเขียนทับไฟล์ที่มีอยู่ เพื่อไม่ให้ข้อมูลถูกแทนที่แต่ถูกเพิ่มไว้ที่ส่วนท้ายของไฟล์ บรรทัดนี้จะต้องแทนที่ด้วย Append(F) ถัดไปเป็นการวนซ้ำจาก 0 ถึงจำนวนบรรทัดทั้งหมดของ Memo1 ในลูป เนื้อหาของบรรทัด Memo1 ทั้งหมดจะถูกเขียนตามลำดับไปยังไฟล์ โปรดทราบว่าฉันใช้ WriteLn ในการเขียน บรรทัดใหม่- ถ้าฉันใช้ Write บรรทัด Memo1 ทั้งหมดในไฟล์จะกลายเป็นบรรทัดเดียว
ตัวจัดการปุ่มที่สองควรมีลักษณะดังนี้:
ขั้นตอน TForm1.Button2Click (ผู้ส่ง: TObject);
ชื่อไฟล์, tmp: สตริง;
FileName:= InputBox("ชื่อไฟล์", "ป้อนชื่อไฟล์", "default.txt");
AssignFile(F, ชื่อไฟล์);
ในขณะที่ EOF(f) ไม่ทำ
Memo1.Lines.Add(tmp);
การกำหนดตัวแปรโลคัลในโพรซีเดอร์นี้คล้ายกับตัวแปรก่อนหน้า บรรทัดแรกและบรรทัดที่สองจะคล้ายกับบรรทัดจากตัวจัดการปุ่มแรก รีเซ็ต(F) - ฉันเปิดไฟล์เพื่ออ่านโดยใช้ขั้นตอนการรีเซ็ต ถัดไป จะมีการวนซ้ำทั่วทั้งไฟล์ (ในขณะที่ EOF(F) ไม่ทำ) ฟังก์ชัน EOF(F: File) จะคืนค่าเป็นจริงเมื่อถึงจุดสิ้นสุดของไฟล์ ลูปจะอ่านหนึ่งบรรทัดจากไฟล์ไปยังตัวแปร tmp และเพิ่มลงใน Memo1 นั่นคือทั้งหมด ฉันคิดว่ามันค่อนข้างง่าย อย่างไรก็ตาม เป็นเรื่องง่ายที่จะหลอกให้โปรแกรมทำให้เกิดข้อยกเว้น ตัวอย่างเช่น เมื่ออ่านไฟล์ ผู้ใช้สามารถระบุชื่อไม่ได้ ไฟล์ที่มีอยู่- แล้วจะเกิดข้อผิดพลาด ต่อไปเราจะพูดถึงวิธีการปกป้องโปรแกรมจากข้อยกเว้น
วิธีที่ 1 - วิธีที่ง่ายที่สุด
แน่นอนว่าง่ายที่สุด แต่ก็เพียงพอแล้ว วิธีที่มีประสิทธิภาพการป้องกันสามารถจัดระเบียบได้โดยใช้การลองแบบซ้อน - ยกเว้นและลอง - ในที่สุดก็บล็อก คุณรู้ว่าหากมีข้อยกเว้นเกิดขึ้นเมื่อดำเนินการคำสั่งในเนื้อความของบล็อก try - ยกเว้น การดำเนินการตามคำสั่งเพิ่มเติมจะหยุดลง และสิ่งที่อยู่ระหว่างจุดสิ้นสุดยกเว้นจะถูกดำเนินการ แต่หากมีข้อยกเว้นเกิดขึ้น และพบ CloseFile(F) ขั้นตอนนี้จะไม่ถูกดำเนินการ และโปรแกรมจะไม่สามารถทำงานได้อย่างถูกต้องและยุติลง วิธีแก้ไขปัญหานี้คือการใช้การลองแบบซ้อน - ยกเว้นและลอง - ในที่สุด นี่คือตัวอย่าง
MessageDlg("ข้อผิดพลาดในการทำงานกับไฟล์", mtError, , 0);
แต่วิธีนี้อาจไม่ทำงานหากมีความพยายามที่จะเปิดไฟล์ที่ไม่มีอยู่ (ข้อยกเว้นจะเกิดขึ้นเมื่อดำเนินการ CloseFile(F))
วิธีที่ 2 - มีประสิทธิภาพ
เป็นที่ทราบกันว่าตัวโปรแกรมเองจะดูแลการจัดการข้อยกเว้น แต่เธอก็ไม่ได้ทำถูกต้องเสมอไป นั่นเป็นเหตุผล ทางออกที่ดีที่สุดเป็นการดีที่จะควบคุมช่วงเวลาที่เปิดไฟล์ เมื่อต้องการทำเช่นนี้ คุณต้องปิดใช้งานการจัดการข้อยกเว้นอัตโนมัติด้วยคำสั่ง (I-) ก่อน และคุณสามารถเปิดใช้งานได้ดังนี้: (I+) จากนั้นตรวจสอบค่าของฟังก์ชัน IOResult หากเปิดไฟล์ได้สำเร็จ ก็จะส่งกลับ 0 นี่คือตัวอย่าง:
ถ้า IOResult<>0 แล้ว
MessageDlg("ไฟล์ "+PChar(ชื่อไฟล์)+ " ไม่มีอยู่", mtError, , 0);
ออก; //ไปต่อไม่ได้แล้ว
แทรกทั้งหมดนี้ลงในขั้นตอนการอ่านไฟล์ (ในตัวอย่างด้านบน) แทนบรรทัดรีเซ็ต (F) คุณยังสามารถประกันความล้มเหลวได้ด้วยการแทรกโครงสร้างนี้ลงในขั้นตอนการบันทึกไฟล์แทนบรรทัดเขียนใหม่
พื้นที่หน่วยความจำที่มีชื่อเปิดอยู่ สื่อภายนอก(ดิสก์) เรียกว่า ไฟล์- ไฟล์อะไรก็ได้ที่มี ชื่อ. ข้อมูลซึ่งจัดเก็บไว้ในไฟล์คือชุดขององค์ประกอบประเภทเดียวกัน ขนาดโดยปกติไฟล์จะถูกจำกัดด้วยความจุของอุปกรณ์ที่จัดเก็บไฟล์เท่านั้น ซึ่งทำให้สามารถประมวลผลข้อมูลจำนวนมากได้
วิธีการประกาศไฟล์ขึ้นอยู่กับประเภทของไฟล์ ไฟล์มีสามประเภท:
ข้อความ;
พิมพ์แล้ว;
ไม่ได้พิมพ์.
ไฟล์ข้อความประกอบด้วยลำดับของอักขระใดๆ อักขระเรียงกันเป็นบรรทัด ซึ่งแต่ละบรรทัดจะลงท้ายด้วยอักขระท้ายบรรทัด จุดสิ้นสุดของไฟล์จะมีสัญลักษณ์ "สิ้นสุดไฟล์" เมื่อเขียนข้อมูลลงในไฟล์ข้อความ ข้อมูลทั้งหมดจะถูกแปลงเป็นประเภทอักขระและจัดเก็บไว้ในแบบฟอร์มนี้ คุณสามารถดูไฟล์ข้อความโดยใช้รายการใดก็ได้ โปรแกรมแก้ไขข้อความ.
คำอธิบายของไฟล์ข้อความ:
var_ชื่อตัวแปร: ไฟล์ข้อความ;
ไฟล์ที่พิมพ์ประกอบด้วยองค์ประกอบประเภทเดียวกันซึ่งจำนวนนั้นไม่ได้กำหนดไว้ล่วงหน้าและสามารถมีได้ นอกจากนี้ยังลงท้ายด้วยสัญลักษณ์ "สิ้นสุดไฟล์" ข้อมูลในไฟล์ที่พิมพ์จะถูกเก็บไว้ใน รหัสไบนารี่และไม่ได้ดู โปรแกรมแก้ไขข้อความ- การประกาศไฟล์ดังกล่าวมีลักษณะดังนี้:
ชื่อตัวแปร: ไฟล์ประเภท;
ใน ไฟล์ที่ไม่ได้พิมพ์ข้อมูลถูกอ่านและเขียนในรูปแบบ บล็อกขนาดที่กำหนดสามารถจัดเก็บข้อมูลประเภทและโครงสร้างใดก็ได้ คำอธิบายของไฟล์ที่ไม่ได้พิมพ์:
var_ชื่อตัวแปร: ไฟล์;
สำหรับ การเข้าถึงไฟล์ใช้แบบพิเศษ ตัวแปรไฟล์.
ตัวอย่างเช่น:
c: ไฟล์จำนวนเต็ม;
สำหรับ การสื่อสารตัวแปรไฟล์ที่มีไฟล์อยู่บนดิสก์ ให้ใช้ขั้นตอน:
AssignFile(ตัวแปร, ชื่อไฟล์);
ตัวแปรในที่นี้คือชื่อของตัวแปรใดๆ ประเภทไฟล์, file_name คือสตริงอักขระที่มี ชื่อเต็มไฟล์ (หากไม่ได้ระบุเส้นทางไปยังไฟล์จะถือว่าอยู่ในนั้น ไดเรกทอรีปัจจุบัน).
ตัวอย่างเช่น:
S:=’text.txt’;
มอบหมาย(f,’d:\tp\tmp\abc.dat’);
สำหรับ การเปิดไฟล์ที่มีอยู่ใช้ขั้นตอน:
รีเซ็ต(file_variable);
หลังจากเปิดไฟล์แล้ว คอมโพเนนต์แรกจะพร้อมใช้งาน
หากต้องการสร้างไฟล์ใหม่หรือลบข้อมูลจากไฟล์ที่มีอยู่ ให้ใช้ขั้นตอนต่อไปนี้:
เขียนใหม่(file_variable);
หลังจากการประหารชีวิต การดำเนินงานต่างๆไฟล์ควรจะเป็น ปิด- เมื่อต้องการทำเช่นนี้ ใช้ขั้นตอน
CloseFile(file_variable);
การบันทึกข้อมูลไปยังไฟล์ข้อความจะดำเนินการตามขั้นตอน
เขียน(ตัวแปร, expression_list);
Writeln(ตัวแปร, expression_list);
โดยที่ expression_list คืออักขระ จำนวนเต็ม จำนวนจริง สตริง หรือ ประเภทบูลีนซึ่งจะถูกเขียนลงในไฟล์ที่เกี่ยวข้องกับตัวแปรไฟล์
กระบวนการ Writeln เพิ่มตัวสิ้นสุดบรรทัดที่ส่วนท้ายของแต่ละบรรทัด
ตัวอย่าง. รูทีนย่อยที่สร้างขึ้นบนดิสก์ ดีไฟล์ abc.txtและเขียนตารางสูตรคูณลงไป
var f:TextFile; ฉัน, เจ: ไบต์;
assignFile(f,"d:\abc.txt");
สำหรับ i:=2 ถึง 9 ทำ
สำหรับ j:= 2 ถึง 9 ทำ
เขียน(f,i,"*",j,"=",i*j," ");
การอ่านข้อมูลจากไฟล์จะดำเนินการตามลำดับตั้งแต่ต้นไฟล์ตามขั้นตอน
Readln(ตัวแปร, ตัวแปร_รายการ);
ที่นี่ Variables_list แสดงรายการตัวแปรที่จะเขียนข้อมูลที่อ่านจากไฟล์ที่เกี่ยวข้องกับตัวแปรไฟล์
ขั้นตอน Readln หลังจากอ่านองค์ประกอบถัดไปจากไฟล์แล้ว ให้ย้ายไปยังบรรทัดถัดไป
การเรียกรูทีนย่อยต่อไปนี้จะส่งผลให้ข้อความจากไฟล์ปรากฏบนแบบฟอร์มในหน้าต่างแก้ไข ง:\abc.txt:
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
เป็น:สตริง; ฉัน:จำนวนเต็ม;
AssignFile(f1,"D:\abc.txt");
สำหรับ i:=1 ถึง 8 ทำ
Memo1.Lines.Add(a);
ใช้ได้กับไฟล์ที่พิมพ์ด้วย ขั้นตอนการอ่านและ บันทึก
อ่าน(ตัวแปร, รายการตัวแปร);
เขียน(ตัวแปร, expression_list);
เฉพาะประเภทนิพจน์การเขียนและการอ่านเท่านั้นที่ต้องตรงกับประเภทไฟล์ที่ประกาศ ขั้นตอน Writeln และ Readln ใช้ไม่ได้กับไฟล์ที่พิมพ์
สำหรับ เคลื่อนที่ผ่านไฟล์ที่พิมพ์ใช้ขั้นตอน:
ค้นหา(ตัวแปร, จำนวน);
ขั้นตอนนี้ช่วยให้คุณสามารถนำทางไปยังองค์ประกอบด้วย หมายเลขที่ระบุนั่นคือมันดำเนินการ เข้าถึงส่วนประกอบไฟล์โดยตรง- ด้วยการเข้าถึงโดยตรง ส่วนประกอบของไฟล์จะมีหมายเลขตั้งแต่ 0 ถึง n-1 โดยที่ n คือจำนวนส่วนประกอบในไฟล์
คุณยังสามารถใช้ฟังก์ชันต่อไปนี้เพื่อเข้าถึงส่วนประกอบของไฟล์ที่พิมพ์ได้โดยตรง:
ขนาดไฟล์ (ตัวแปร) – ส่งคืนจำนวนส่วนประกอบจริง เปิดไฟล์เกี่ยวข้องกับ file_variable (สำหรับ ไฟล์เปล่าฟังก์ชันจะส่งคืน 0);
filepos(variable) – ส่งกลับค่าของตำแหน่งปัจจุบันในไฟล์ที่เปิดซึ่งเชื่อมโยงกับตัวแปรไฟล์ (หากไฟล์เพิ่งถูกเปิด ฟังก์ชันจะคืนค่าศูนย์ หลังจากอ่านส่วนประกอบสุดท้ายจากไฟล์ ค่าฟังก์ชันจะตรงกับ ขนาดไฟล์แสดงว่าถึงจุดสิ้นสุดของไฟล์แล้ว)
กระบวนการค้นหาและฟังก์ชันขนาดไฟล์และ filepos ไม่ทำงานกับไฟล์ข้อความ รูทีนต่อไปนี้ใช้ได้กับทั้งไฟล์ที่พิมพ์และไฟล์ข้อความ:
เปลี่ยนชื่อ(ตัวแปร, ชื่อไฟล์)
เปลี่ยนชื่อไฟล์ปิดที่เกี่ยวข้องกับตัวแปรไฟล์ตามชื่อที่ระบุในบรรทัดชื่อไฟล์
ลบ(ตัวแปร) – ลบ ไฟล์ปิดเชื่อมโยงกับตัวแปรไฟล์
Eof(variable) ประเมินเป็นจริงหากถึงจุดสิ้นสุดของไฟล์ที่เกี่ยวข้องกับ file_variable หรือไม่เช่นนั้นจะเป็น false
ตัวอย่าง. รูทีนย่อยด้านล่างทำงานเช่นนี้ เปิดไฟล์จริง d:\abc.datและเขียนจำนวนหนึ่งลงไป ตัวเลขจริงคำนวณโดยสูตร ไม่สามารถดูไฟล์ที่สร้างขึ้นได้เนื่องจากข้อมูลในไฟล์นั้นแสดงเป็นรหัสไบนารี่
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
AssignFile(f,"d:\abc.dat");
n:=StrToInt(แก้ไข1.ข้อความ);
สำหรับ i:=1 ถึง n ทำ
a:= sqr(i)/sqrt(i);
เพื่อให้แน่ใจว่าการเขียนลงไฟล์ d:\abc.datเกิดขึ้นสำเร็จ มาแสดงค่าของมันในหน้าต่างแก้ไข:
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
f1: ไฟล์ของจริง;
AssignFile(f1,"D:\abc.dat");
ในขณะที่ eof (f1) ไม่ทำ
Memo1.Lines.Add(FloatToStr(a));
งาน. บนดิสก์ อีมีไฟล์จำนวนเต็ม abc.intให้สลับองค์ประกอบสูงสุดและต่ำสุด
โปรแกรมต่อไปนี้ทำงานในลักษณะนี้ ส่วนประกอบของไฟล์จะถูกอ่านลงในอาร์เรย์ องค์ประกอบอาร์เรย์จะแสดงในช่อง Memo1 จากนั้นจะค้นหาองค์ประกอบขั้นต่ำและสูงสุดของอาร์เรย์และดัชนี ส่วนประกอบสูงสุดและต่ำสุดจะถูกเขียนใหม่ลงในไฟล์ในตำแหน่งที่เกี่ยวข้อง
สุดท้าย องค์ประกอบของไฟล์ที่แปลงแล้วจะแสดงในช่อง Memo2
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
f: ไฟล์จำนวนเต็ม;
a:อาร์เรย์ของจำนวนเต็ม;
ฉัน, nmax, nmin: ไบต์; สูงสุด, นาที: จำนวนเต็ม;
AssignFile(f,"e:\abc.int");
สำหรับ i:=0 ถึงขนาดไฟล์(f)-1 ทำ
Memo1.Lines.Add(FloatToStr(a[i]));
สูงสุด:=ก; nสูงสุด:=0;
นาที:=a; นาที:=0;
สำหรับ i:=1 ถึงขนาดไฟล์(f)-1 ทำ
ถ้า a[i]>สูงสุดแล้ว
ถ้า [i] สำหรับ i:=0 ถึงขนาดไฟล์(f)-1 ทำ Memo2.Lines.Add(FloatToStr(a[i])); เราจะดูรายละเอียดเกี่ยวกับวิธีการคัดลอก ลบ และเปลี่ยนชื่อไฟล์ มาเรียนรู้วิธีการอ่านและเขียนข้อมูลลงในไฟล์ที่พิมพ์ ในการทำเช่นนี้ เราต้องเรียกใช้ฟังก์ชันเดียวซึ่งจะคัดลอกไฟล์โดยเฉพาะ นี่คือฟังก์ชัน CopyFile() มีพารามิเตอร์สามตัว ซึ่งจำเป็นต้องมีสองตัว นี่คือไวยากรณ์แบบเต็ม ตัวอย่าง: CopyFile("D:sekretBD.txt","C: ame.txt", true); ในพารามิเตอร์แรก คุณสามารถระบุไม่เพียงแต่เส้นทางแบบเต็มไปยังไฟล์เท่านั้น ตัวอย่างเช่น หากเราระบุพาธ “sekretBD.txt” โปรแกรมของเราจะค้นหาไฟล์นี้ในไดเร็กทอรีของมัน ต้องระบุชื่อและการอนุญาตให้เหมือนกับไฟล์ทุกประการ ไม่เช่นนั้นโปรแกรมก็จะไม่พบไฟล์ ฟังก์ชัน RenameFile() มีหน้าที่ในการเปลี่ยนชื่อไฟล์ มันมี 2 พารามิเตอร์ นี่คือไวยากรณ์แบบเต็ม เปลี่ยนชื่อไฟล์("C:2.txt","3.txt"); จากนั้นมันจะคัดลอกไฟล์ไปยังไดเร็กทอรีโปรแกรม เหล่านั้น. ปรากฎว่ามันสามารถใช้เป็นสำเนาได้เช่นกัน มันแปลกนิดหน่อย ทุกอย่างค่อนข้างง่ายที่นี่ ฟังก์ชั่นที่สามารถใช้เพื่อลบไฟล์มีชื่อดังนี้: DeleteFile("C:myprofile.txt"); สิ่งเดียวคือมันไม่ได้ลบไฟล์ 100% เสมอไป เมื่อไฟล์ได้รับการป้องกัน เธอจะไม่สามารถลบมันได้ ไฟล์ที่พิมพ์คืออะไร? นี่คือไฟล์ที่มีโครงสร้างเฉพาะ โดยทั่วไปโครงสร้างนี้ประกอบด้วยเรกคอร์ดและประเภทพื้นฐาน โดยทั่วไป สิ่งสำคัญคือประเภทจะต้องมีขนาดคงที่ที่ทราบ ดังนั้นคุณจึงไม่สามารถใช้ประเภทสตริงได้ คุณต้องดำเนินการดังนี้: String[N] Var f: ไฟล์ของ<Тип> จากนั้นเราจำเป็นต้องเชื่อมต่อกับไฟล์ มีคำสั่ง AssignFile สำหรับสิ่งนี้ หากต้องการโทร คุณต้องระบุพารามิเตอร์สองตัว นี่คือตัวแปรที่เราประกาศไว้ด้านบนและเส้นทางไปยังไฟล์ ตัวอย่างเช่น AssignFile(f,"C:delphi.ini"); ตอนนี้จำเป็นต้องเปิดไฟล์ สามารถเปิดได้สองวิธี: โดยจะลับหรือไม่ต้องลับก็ได้ วิธีการเขียนใหม่จะเปิดไฟล์หลังจากสร้างมันขึ้นมาครั้งแรก เหล่านั้น. หากไฟล์ไม่อยู่ในเส้นทางที่เราระบุ มันจะสร้างมันขึ้นมา หากมีไฟล์ดังกล่าวอยู่แล้ว ไฟล์นั้นจะถูกลบและสร้างไฟล์ใหม่ทั้งหมด วิธีการรีเซ็ตจะเปิดไฟล์และวางตัวชี้ไว้ที่จุดเริ่มต้นของไฟล์ แต่วิธีนี้เป็นอันตรายเพราะหากไม่มีไฟล์ที่ระบุในการเชื่อมต่อโปรแกรมจะล้มเหลวโดยมีข้อผิดพลาด ดังนั้นในการใช้ฟังก์ชันรีเซ็ตอย่างถูกต้อง คุณต้องบอกให้คอมไพเลอร์ปิดการใช้งานข้อผิดพลาด สิ่งนี้ระบุโดยคำสั่ง ($I-) เช่น ไวยากรณ์แบบเต็มสำหรับฟังก์ชันรีเซ็ตจะเป็น: ($ฉัน-) หลังจากนี้คุณต้องตรวจสอบว่าไฟล์ถูกเปิดหรือไม่ ซึ่งสามารถทำได้โดยใช้ฟังก์ชัน IOResult หากไม่เป็นศูนย์แสดงว่าทุกอย่างสำเร็จ ($ฉัน-) ฟังก์ชัน FileExists จะช่วยคุณตรวจสอบด้วย จำเป็นต้องระบุเส้นทางไปยังไฟล์ หากต้องการเขียนลงไฟล์ ให้ใช้ฟังก์ชัน Write() ซึ่งระบุพารามิเตอร์สองตัวที่เหมือนกัน: ตัวแปรไฟล์และประเภทบันทึก ในกรณีของเราคือสตริง ไวยากรณ์: ในขณะที่ไม่ใช่ eof(f) ทำ นอกจากนี้ยังมีฟังก์ชันการค้นหาซึ่งเราสามารถไปที่บันทึกที่เราสนใจได้ ตัวอย่างเช่น เราจำเป็นต้องเข้าถึงบันทึก 20 และเราทำสิ่งนี้: นอกจากนี้ยังมีฟังก์ชันตัดทอนซึ่งเราสามารถลบรายการทั้งหมดในไฟล์โดยเริ่มจากตำแหน่งตัวชี้ สามารถระบุตำแหน่งได้โดยใช้ฟังก์ชันค้นหาซึ่งไม่เข้าใจ หลังจากดำเนินการกับไฟล์ทั้งหมดเสร็จแล้ว คุณจะต้องปิดมันโดยใช้ฟังก์ชัน CloseFile(f) การคัดลอกไฟล์โดยใช้ .
CopyFile("เส้นทางไปยังไฟล์เริ่มต้น", "เส้นทางไปยังตำแหน่งที่จะคัดลอก", เขียนทับหรือไม่)
ในพารามิเตอร์ตัวที่สอง คุณยังสามารถระบุเส้นทางสัมพัทธ์และระบุชื่อไฟล์และนามสกุลตามที่คุณต้องการได้ เหล่านั้น. การใช้ฟังก์ชันนี้คุณสามารถเปลี่ยนชื่อได้เช่นกัน
พารามิเตอร์ตัวที่สามมีหน้าที่เขียนทับไฟล์ หากเราระบุเป็น true ไฟล์จะไม่ถูกเขียนทับ และหากเป็น false โปรแกรมจะเขียนทับไฟล์ การเปลี่ยนชื่อไฟล์โดยใช้
RenameFile("เส้นทางไปยังไฟล์", "ชื่อใหม่");
พูดตามตรง ฉันไม่พอใจกับไวยากรณ์ของฟังก์ชันนี้เป็นพิเศษ ในนั้นคุณต้องระบุเส้นทางแบบเต็มในพารามิเตอร์ทั้งสองด้วย เหล่านั้น. เช่นถ้าเราเขียนแบบนี้การลบไฟล์โดยใช้
การทำงานกับไฟล์ที่พิมพ์ใน
ก่อนอื่นเราต้องประกาศตัวแปรที่จะเก็บข้อมูลจากไฟล์ ทำเช่นนี้:
ตัวอย่างเช่น f: ไฟล์ของสตริง;
รีเซ็ต(ฉ);
($ฉัน+)
ไวยากรณ์แบบเต็ม:
รีเซ็ต(ฉ);
($ฉัน+)
ถ้า IOresult<>0 แล้ว<ваш код>
หากต้องการอ่านไฟล์ ให้ใช้ฟังก์ชัน Read() ซึ่งระบุพารามิเตอร์สองตัว: ตัวแปรไฟล์และประเภทบันทึก ในกรณีของเราคือสตริง ไวยากรณ์:
อ่าน(f,สตริง);
นั่นคือทั้งหมดที่ นี่เป็นการสรุปบทเรียน พบกันบนเว็บไซต์!