From 2d49e4a2d8c137cdac039acef03207e456c8c194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Tu=E1=BA=A5n=20D=C5=A9ng?= Date: Sun, 15 Jul 2018 11:58:04 +0700 Subject: [PATCH 1/4] Add chapter08 (was chapter07) --- book/chapter08.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 book/chapter08.md diff --git a/book/chapter08.md b/book/chapter08.md new file mode 100644 index 0000000..20ceb21 --- /dev/null +++ b/book/chapter08.md @@ -0,0 +1,100 @@ +Chương 7: 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)`
`Assign(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)`
`Close(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 + assign(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 + assign(f1, 'tep1.txt'); + assign(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. + From 7dfee0c24a61d3fd6d34939185551793a96dbc85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Tu=E1=BA=A5n=20D=C5=A9ng?= Date: Sun, 15 Jul 2018 11:59:38 +0700 Subject: [PATCH 2/4] Format chapter08 --- book/chapter08.md | 64 +++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/book/chapter08.md b/book/chapter08.md index 20ceb21..9994f9b 100644 --- a/book/chapter08.md +++ b/book/chapter08.md @@ -1,22 +1,22 @@ -Chương 7: Tệp (Files) -========================== +# Chương 7: 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 -------- +## 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 ---- +## Tệp + Ngôn ngữ Pascal hỗ trợ đọc và ghi tệp thông qua kiểu dữ liệu `file`. + ```pascal ... var @@ -27,37 +27,39 @@ var 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 --------------------- +## Các thao tác với tệp ### Đóng/Mở tệp -|Câu lệnh|Hành động| -|:---:|:----| -|`AssignFile(File, String)`
`Assign(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)`
`Close(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âu lệnh | Hành động | +| :--------------------------------------------------: | :------------------------------------------------------------ | +| `AssignFile(File, String)`
`Assign(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)`
`Close(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â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 ------------ +## 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 +Var i, k: integer; f: TextFile; @@ -71,15 +73,17 @@ Begin 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 ---------- +## 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 +Var i: integer; s: string; f1, f2: TextFile; @@ -96,5 +100,5 @@ Begin 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. +> 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. From 8a81ffa0b7053019da7ce4b25ac794b5c9209bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Tu=E1=BA=A5n=20D=C5=A9ng?= Date: Sun, 15 Jul 2018 13:54:39 +0700 Subject: [PATCH 3/4] Update file --- book/chapter08.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/book/chapter08.md b/book/chapter08.md index 9994f9b..8b89138 100644 --- a/book/chapter08.md +++ b/book/chapter08.md @@ -1,4 +1,4 @@ -# Chương 7: Tệp (Files) +# Chương 8: Tệp (Files) Trong chương này, bạn sẽ biết được: @@ -31,14 +31,14 @@ var ### Đóng/Mở tệp -| Câu lệnh | Hành động | -| :--------------------------------------------------: | :------------------------------------------------------------ | -| `AssignFile(File, String)`
`Assign(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)`
`Close(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â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 From dcb50389e1beab8bb8e1ab3f7e38eaaf9df56a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Tu=E1=BA=A5n=20D=C5=A9ng?= Date: Sun, 15 Jul 2018 14:21:18 +0700 Subject: [PATCH 4/4] Format to standard style --- book/chapter08.md | 60 ++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/book/chapter08.md b/book/chapter08.md index 8b89138..f1d84af 100644 --- a/book/chapter08.md +++ b/book/chapter08.md @@ -8,10 +8,10 @@ Trong chương này, bạn sẽ biết được: ## 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) +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 @@ -31,24 +31,24 @@ var ### Đóng/Mở tệp -| Câu lệnh | Hành động | -| :------------------------: | :------------------------------------------------------------ | +| 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 | +| `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 | +| 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 | +| `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). @@ -64,12 +64,12 @@ Var f: TextFile; Begin - assign(f, 'HelloWorld.txt'); - reset(f); + AssignFile(f, 'HelloWorld.txt'); + Reset(f); For i:=1 To 5 Do Begin - readln(f, k); - writeln(k); + ReadLn(f, k); + WriteLn(k); End; End. ``` @@ -89,16 +89,22 @@ Var f1, f2: TextFile; Begin - assign(f1, 'tep1.txt'); - assign(f2, 'tep2.txt'); - reset(f1); - rewrite(f2); + 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); + 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)