Terus ke kandungan
IGCSE·Tuition
Sains Komputer · Pelajaran

Kendalikan hujung fail semasa membaca fail

Kod fail terasa lebih sukar daripada gelung biasa kerana anda tidak dapat melihat data, hanya baris yang membacanya.

Dalam halaman ini
  1. Apakah coraknya?
  2. Contoh berlangkah
  3. Kesilapan yang perlu diawasi
  4. Semak sendiri
  5. Ke mana selepas ini

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
LangkahEOF?MarkTotalCount
Sebelum gelung00
Ujian 1FALSE00
Selepas badan 112121
Ujian 2FALSE121
Selepas badan 27192
Ujian 3FALSE192
Selepas badan 320393
Ujian 4TRUE393

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.

Soalan lazim

Apakah maksud hujung fail (end-of-file)?

Ia ialah titik selepas baris terakhir dibaca, apabila tiada apa lagi dalam fail. Ujian seperti EOF memulangkan benar pada titik itu, jadi gelung boleh berhenti. Sebelum itu ia memulangkan palsu dan gelung membaca satu baris lagi.

Mengapa READFILE mesti berada di dalam gelung?

Setiap bacaan menggerakkan kedudukan ke hadapan. Jika bacaan tiada dalam badan gelung, kedudukan tidak pernah berubah, ujian hujung fail tidak pernah menjadi benar dan gelung tidak pernah berhenti.

Adakah saya perlu menutup fail?

Ya. Menutup fail selepas gelung melepaskannya, dan jawapan peperiksaan dijangka menunjukkannya. Letakkan penyataan tutup selepas gelung tamat, bukan di dalam gelung, kerana pusingan seterusnya akan cuba membaca fail yang telah ditutup.

Dikemas kini:

Langkah seterusnya

Jika anda tidak pasti sama ada gelung fail akan berhenti atau berjalan selama-lamanya, guru satu dengan satu boleh menjejaknya bersama anda dengan fail kecil sehingga coraknya menjadi automatik.

Kelas percubaan berbayar satu jam pada kadar guru yang disahkan, bermula RM80.

Tuisyen diatur bersama ibu bapa atau penjaga. Hantar halaman ini kepada mereka melalui WhatsApp supaya mereka boleh bertanya bagi pihak anda.

Ibu bapa: tanya di sini

  • 9,000+ pelajar telah dibantu melalui perkhidmatan kami
  • 9+ tahun membantu pelajar IGCSE