diff --git a/book/chapter08.md b/book/chapter08.md new file mode 100644 index 0000000..f1d84af --- /dev/null +++ b/book/chapter08.md @@ -0,0 +1,110 @@ +# Chương 8: Tệp (Files) + +Trong chương này, bạn sẽ biết được: + +- Tệp là gì +- Cách sử dụng, thao tác với tệp +- Ứng dụng của tệp + +## Mục lục + +1. [Tệp](#tệp) +2. [Các thao tác với tệp](#các-thao-tác-với-tệp) +3. [Tệp văn bản](#tệp-văn-bản) +4. [Nhập xuất](#nhập-xuất) + +## Tệp + +Ngôn ngữ Pascal hỗ trợ đọc và ghi tệp thông qua kiểu dữ liệu `file`. + +```pascal +... +var + MyFile: TextFile; // myFile là tệp văn bản + f: text; // f vẫn là tệp văn bản, nhưng là cách viết cũ + + bin: file; // bin là tệp được đọc theo kiểu nhị phân không xét kiểu + ch: file Of char; // ch là tệp được đọc theo kiểu nhị phân theo `char` +``` + +## Các thao tác với tệp + +### Đóng/Mở tệp + +| Câu lệnh | Hành động | +| :------------------------- | :------------------------------------------------------------ | +| `AssignFile(File, String)` | Gán tệp cho một biến | +| `Reset(File)` | Mở tệp ra, đưa con trỏ về vị trí đầu tiên | +| `Rewrite(File)` | Mở tệp ra, xóa hết nội dung và đưa con trỏ về vị trí đầu tiên | +| `Append(File)` | Mở tệp ra, đưa con trỏ đến vị trí cuối cùng của tệp | +| `CloseFile(File)` | Đóng tệp | +| `IOResult` | Trả về kết quả của thao tác nhập/xuất tệp gần nhất | + +### Đọc/Ghi tệp + +| Câu lệnh | Hành động | +| :--------------------------------------------------------- | :---------------------------------------------------- | +| `Read(File, Arguments)`
`ReadLn(TextFile, Arguments)` | Đọc từ tệp | +| `Write(File, Arguments)`
`WriteLn(TextFile, Arguments)` | Ghi vào tệp | +| `EOF(File)` | Kiểm tra xem con trỏ đã đến vị trí cuối tệp hay chưa | +| `EOLn(File)` | Kiểm tra xem con trỏ đã đến vị trí cuối dòng hay chưa | +| `Seek(File, Int64)` | Di chuyển con trỏ tới vị trí chỉ định | + +> Các hàm và thủ tục khác có thể tìm thấy tại [Free Pascal 'System' Unit](https://www.freepascal.org/docs-html/rtl/system/index-5.html). + +## Tệp văn bản + +Đây là loại tệp được sử dụng nhiều nhất trong Pascal vì tính đa dụng, dễ dùng và được nhiều hàm, thủ tục hỗ trợ. + +```pascal +Uses crt; + +Var + i, k: integer; + f: TextFile; + +Begin + AssignFile(f, 'HelloWorld.txt'); + Reset(f); + For i:=1 To 5 Do + Begin + ReadLn(f, k); + WriteLn(k); + End; +End. +``` + +> Bạn hãy thử tạo tệp _HelloWorld.txt_, nhập vào tệp vài con số, lưu lại rồi chạy chương trình trên. Hãy chú ý tới kết quả in ra trên màn hình và so sánh với các con số trong tệp _HelloWorld.txt_. + +## Nhập xuất + +Vậy thì làm thế nào để đọc và ghi? Rất đơn giản, Pascal cho phép chúng ta sử dụng `Read()`, `ReadLn()` để đọc và `Write()`, `WriteLn()` để ghi. + +```pascal +Uses crt; + +Var + i: integer; + s: string; + f1, f2: TextFile; + +Begin + AssignFile(f1, 'tep1.txt'); + AssignFile(f2, 'tep2.txt'); + Reset(f1); + Rewrite(f2); + For i:=1 To 5 Do + Begin + ReadLn(f1, s); + WriteLn(f2, s); + End; +End. +``` + +> Tiếp tục, bạn hãy thử tạo tệp _tep1.txt_, nhập vào tệp vài con số, lưu lại rồi chạy chương trình trên. Sẽ có một tệp _tep2.txt_ xuất hiện sau khi chạy chương trình. + +--- + +[<< Chương 7](chapter07.md) + +[Chương 9 >>](chapter09.md)