Delphi เขียนลงไฟล์อย่างรวดเร็ว การสร้างและทำงานกับไฟล์ข้อความใน Delphi

บทที่ 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("เส้นทางไปยังไฟล์เริ่มต้น", "เส้นทางไปยังตำแหน่งที่จะคัดลอก", เขียนทับหรือไม่)

ตัวอย่าง: CopyFile("D:sekretBD.txt","C: ame.txt", true);

ในพารามิเตอร์แรก คุณสามารถระบุไม่เพียงแต่เส้นทางแบบเต็มไปยังไฟล์เท่านั้น ตัวอย่างเช่น หากเราระบุพาธ “sekretBD.txt” โปรแกรมของเราจะค้นหาไฟล์นี้ในไดเร็กทอรีของมัน ต้องระบุชื่อและการอนุญาตให้เหมือนกับไฟล์ทุกประการ ไม่เช่นนั้นโปรแกรมก็จะไม่พบไฟล์
ในพารามิเตอร์ตัวที่สอง คุณยังสามารถระบุเส้นทางสัมพัทธ์และระบุชื่อไฟล์และนามสกุลตามที่คุณต้องการได้ เหล่านั้น. การใช้ฟังก์ชันนี้คุณสามารถเปลี่ยนชื่อได้เช่นกัน
พารามิเตอร์ตัวที่สามมีหน้าที่เขียนทับไฟล์ หากเราระบุเป็น true ไฟล์จะไม่ถูกเขียนทับ และหากเป็น false โปรแกรมจะเขียนทับไฟล์

การเปลี่ยนชื่อไฟล์โดยใช้

ฟังก์ชัน RenameFile() มีหน้าที่ในการเปลี่ยนชื่อไฟล์ มันมี 2 พารามิเตอร์ นี่คือไวยากรณ์แบบเต็ม
RenameFile("เส้นทางไปยังไฟล์", "ชื่อใหม่");
พูดตามตรง ฉันไม่พอใจกับไวยากรณ์ของฟังก์ชันนี้เป็นพิเศษ ในนั้นคุณต้องระบุเส้นทางแบบเต็มในพารามิเตอร์ทั้งสองด้วย เหล่านั้น. เช่นถ้าเราเขียนแบบนี้

เปลี่ยนชื่อไฟล์("C:2.txt","3.txt");

จากนั้นมันจะคัดลอกไฟล์ไปยังไดเร็กทอรีโปรแกรม เหล่านั้น. ปรากฎว่ามันสามารถใช้เป็นสำเนาได้เช่นกัน มันแปลกนิดหน่อย

การลบไฟล์โดยใช้

ทุกอย่างค่อนข้างง่ายที่นี่ ฟังก์ชั่นที่สามารถใช้เพื่อลบไฟล์มีชื่อดังนี้:

DeleteFile("C:myprofile.txt");

สิ่งเดียวคือมันไม่ได้ลบไฟล์ 100% เสมอไป เมื่อไฟล์ได้รับการป้องกัน เธอจะไม่สามารถลบมันได้

การทำงานกับไฟล์ที่พิมพ์ใน

ไฟล์ที่พิมพ์คืออะไร? นี่คือไฟล์ที่มีโครงสร้างเฉพาะ โดยทั่วไปโครงสร้างนี้ประกอบด้วยเรกคอร์ดและประเภทพื้นฐาน โดยทั่วไป สิ่งสำคัญคือประเภทจะต้องมีขนาดคงที่ที่ทราบ ดังนั้นคุณจึงไม่สามารถใช้ประเภทสตริงได้ คุณต้องดำเนินการดังนี้: String[N]
ก่อนอื่นเราต้องประกาศตัวแปรที่จะเก็บข้อมูลจากไฟล์ ทำเช่นนี้:

Var f: ไฟล์ของ<Тип>
ตัวอย่างเช่น f: ไฟล์ของสตริง;

จากนั้นเราจำเป็นต้องเชื่อมต่อกับไฟล์ มีคำสั่ง AssignFile สำหรับสิ่งนี้ หากต้องการโทร คุณต้องระบุพารามิเตอร์สองตัว นี่คือตัวแปรที่เราประกาศไว้ด้านบนและเส้นทางไปยังไฟล์ ตัวอย่างเช่น

AssignFile(f,"C:delphi.ini");

ตอนนี้จำเป็นต้องเปิดไฟล์ สามารถเปิดได้สองวิธี: โดยจะลับหรือไม่ต้องลับก็ได้ วิธีการเขียนใหม่จะเปิดไฟล์หลังจากสร้างมันขึ้นมาครั้งแรก เหล่านั้น. หากไฟล์ไม่อยู่ในเส้นทางที่เราระบุ มันจะสร้างมันขึ้นมา หากมีไฟล์ดังกล่าวอยู่แล้ว ไฟล์นั้นจะถูกลบและสร้างไฟล์ใหม่ทั้งหมด วิธีการรีเซ็ตจะเปิดไฟล์และวางตัวชี้ไว้ที่จุดเริ่มต้นของไฟล์ แต่วิธีนี้เป็นอันตรายเพราะหากไม่มีไฟล์ที่ระบุในการเชื่อมต่อโปรแกรมจะล้มเหลวโดยมีข้อผิดพลาด ดังนั้นในการใช้ฟังก์ชันรีเซ็ตอย่างถูกต้อง คุณต้องบอกให้คอมไพเลอร์ปิดการใช้งานข้อผิดพลาด สิ่งนี้ระบุโดยคำสั่ง ($I-) เช่น ไวยากรณ์แบบเต็มสำหรับฟังก์ชันรีเซ็ตจะเป็น:

($ฉัน-)
รีเซ็ต(ฉ);
($ฉัน+)

หลังจากนี้คุณต้องตรวจสอบว่าไฟล์ถูกเปิดหรือไม่ ซึ่งสามารถทำได้โดยใช้ฟังก์ชัน IOResult หากไม่เป็นศูนย์แสดงว่าทุกอย่างสำเร็จ
ไวยากรณ์แบบเต็ม:

($ฉัน-)
รีเซ็ต(ฉ);
($ฉัน+)
ถ้า IOresult<>0 แล้ว<ваш код>

ฟังก์ชัน FileExists จะช่วยคุณตรวจสอบด้วย จำเป็นต้องระบุเส้นทางไปยังไฟล์
หากต้องการอ่านไฟล์ ให้ใช้ฟังก์ชัน Read() ซึ่งระบุพารามิเตอร์สองตัว: ตัวแปรไฟล์และประเภทบันทึก ในกรณีของเราคือสตริง ไวยากรณ์:

หากต้องการเขียนลงไฟล์ ให้ใช้ฟังก์ชัน Write() ซึ่งระบุพารามิเตอร์สองตัวที่เหมือนกัน: ตัวแปรไฟล์และประเภทบันทึก ในกรณีของเราคือสตริง ไวยากรณ์:

ในขณะที่ไม่ใช่ eof(f) ทำ
อ่าน(f,สตริง);

นอกจากนี้ยังมีฟังก์ชันการค้นหาซึ่งเราสามารถไปที่บันทึกที่เราสนใจได้ ตัวอย่างเช่น เราจำเป็นต้องเข้าถึงบันทึก 20 และเราทำสิ่งนี้:

นอกจากนี้ยังมีฟังก์ชันตัดทอนซึ่งเราสามารถลบรายการทั้งหมดในไฟล์โดยเริ่มจากตำแหน่งตัวชี้ สามารถระบุตำแหน่งได้โดยใช้ฟังก์ชันค้นหาซึ่งไม่เข้าใจ

หลังจากดำเนินการกับไฟล์ทั้งหมดเสร็จแล้ว คุณจะต้องปิดมันโดยใช้ฟังก์ชัน CloseFile(f)
นั่นคือทั้งหมดที่ นี่เป็นการสรุปบทเรียน พบกันบนเว็บไซต์!