Membaca fail mempunyai corak tetap: buka fail, terus membaca sehingga hujung fail, tutup fail. Gelung tidak tahu berapa banyak baris yang ada, jadi ia bertanya soalan setiap kali: “adakah fail sudah habis?”
Pelajaran ini tergolong dalam carian, isihan dan fail. Ia menggunakan kemahiran gelung daripada pengulangan dan tatasusunan dan pengendalian baris daripada membaca rekod. Semak panduan pseudokod Cambridge untuk tahun peperiksaan anda bagi bentuk penyataan yang tepat.
Apakah coraknya?
OPENFILE "Marks.txt" FOR READ
WHILE NOT EOF("Marks.txt")
READFILE "Marks.txt", Mark
...use Mark...
ENDWHILE
CLOSEFILE "Marks.txt"
Ujian berada di permulaan gelung, jadi ia disemak sebelum setiap bacaan. Bacaan berada di dalam badan gelung, kerana setiap bacaan bergerak ke baris seterusnya.
Contoh berlangkah
Fail rekaan Marks.txt mengandungi tiga baris, masing-masing nombor bulat: 12, kemudian 7, kemudian 20. Atur cara ini menjumlahkannya dan mengira purata.
Total ← 0
Count ← 0
OPENFILE "Marks.txt" FOR READ
WHILE NOT EOF("Marks.txt")
READFILE "Marks.txt", Mark
Total ← Total + Mark
Count ← Count + 1
ENDWHILE
CLOSEFILE "Marks.txt"
OUTPUT Total / Count
| Langkah | EOF? | Mark | Total | Count |
|---|---|---|---|---|
| Sebelum gelung | 0 | 0 | ||
| Ujian 1 | FALSE | 0 | 0 | |
| Selepas badan 1 | 12 | 12 | 1 | |
| Ujian 2 | FALSE | 12 | 1 | |
| Selepas badan 2 | 7 | 19 | 2 | |
| Ujian 3 | FALSE | 19 | 2 | |
| Selepas badan 3 | 20 | 39 | 3 | |
| Ujian 4 | TRUE | 39 | 3 |
Pada ujian 4, fail tidak mempunyai baris lagi, jadi gelung berakhir. Outputnya ialah 39 / 3 = 13. Semak: 12 + 7 + 20 = 39, dan 39 dibahagi 3 ialah 13.
Kesilapan yang perlu diawasi
Seorang pelajar terlupa membaca:
WHILE NOT EOF("Marks.txt")
Total ← Total + Mark
Count ← Count + 1
ENDWHILE
Tiada apa dalam gelung yang membaca baris, jadi kedudukan fail tidak pernah bergerak. EOF kekal FALSE, dan gelung tidak pernah berakhir. Selain itu Mark tidak pernah diberi nilai daripada fail.
Pembetulannya ialah meletakkan READFILE di dalam badan, sebelum menggunakan Mark. Semasa menjejak gelung fail, sentiasa tanya: “apa dalam badan ini yang akhirnya menjadikan ujian benar?” Pelatih jejak pseudokod terhad menghentikan gelung sebegini pada had keselamatan dan menunjukkan pemboleh ubah yang tidak pernah berubah.
Kesilapan kedua ialah meletakkan CLOSEFILE di dalam gelung. Pusingan pertama akan menutup fail dan pusingan kedua akan cuba membaca daripadanya.
Semak sendiri
1. Fail mengandungi baris 4, 9, 6. Dengan atur cara di atas, apakah Total dan Count pada akhirnya?
Lihat jawapan
4 + 9 + 6 = 19, dan badan berjalan sekali bagi setiap baris. Total = 19, Count = 3.
2. Sebuah fail mempunyai lima baris. Berapa kali badan gelung berjalan, dan berapa kali ujian EOF dinilai?
Lihat jawapan
Badan berjalan 5 kali. Ujian EOF dinilai 6 kali: lima kali palsu, kemudian sekali benar.
3. Di mana CLOSEFILE patut diletakkan, dan mengapa?
Lihat jawapan
Selepas ENDWHILE. Ia berjalan sekali apabila semua bacaan selesai. Di dalam gelung, ia akan menutup fail selepas bacaan pertama.
Ke mana selepas ini
Pelajaran terakhir dalam modul ini bertanya bagaimana menyemak algoritma dengan data kosong dan pendua. Ia juga menggunakan semula gelung fail ini, kerana fail kosong menjadikan Count sifar.
Jika anda kehilangan markah soalan fail kerana kesilapan susunan baris, guru dalam tuisyen Computer Science dalam talian satu dengan satu boleh menyemak susunan itu dalam jawapan anda.