| English | Bahasa Indonesia |
|---|---|
| file/faɪl/ | file |
| text file/tekst faɪl/ | file teks |
| secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ | penyimpanan sekunder |
| persistence/pəˈsɪstəns/ | kelangsungan |
| end of file/end ɒv faɪl/ | akhir file |
| separator/ˈsepəreɪtə/ | pemisah |
| sequential/siːˈkwenʃl/ | sekuensial |
Permainan yang mengingat
- Hingga 1987, mematikan konsol permainan menghapus segalanya. Setiap sesi dimulai dari layar pertama; permainan panjang adalah sore panjang atau tak ada apa-apa.
- The Legend of Zelda dikirim dengan baterai kecil di dalam kartrid yang menjaga ratusan byte tetap aktif. Untuk pertama kalinya game rumah bisa menyimpan, dan melanjutkan dari mana Anda tertinggal.
- Setiap skor tertinggi, setiap dokumen, setiap pengaturan yang pernah Anda simpan ada karena alasan yang sama: RAM melupakan saat daya mati, dan file tidak.
- Pelajaran ini adalah mengapa file ada dan bagaimana pseudocode membaca dan menulis file teks, baris demi baris.
Mengapa file
- Variabel hidup di RAM dan hilang saat program berakhir. File di penyimpanan sekunder mempertahankan data antar jalankan program: keabadian.
- File memungkinkan output satu program menjadi input program lain, sehingga data dapat dibagikan.
- File dapat menampung lebih banyak daripada muatan memori, dan program dapat mulai ulang dari状态 tersimpan.

Variabel hilang di akhir jalankan; file masih ada besok
Mengapa program menulis data ke file alih-alih menyimpannya dalam variabel?
RAM bersifat volatil, jadi data hilang saat keluar. File pada penyimpanan sekunder bertahan antar jalanan.
File teks dan tiga mode
- File teks menyimpan data sebagai baris karakter, yang dibaca dan ditulis program satu baris sekaligus, dari awal. Urutan baris inilah yang memungkinkan loop memprosesnya.
OPENFILE … FOR READmembaca dari baris pertama.FOR WRITEmembuat file baru, atau menimpa yang sudah ada.FOR APPENDmenambahkan baris baru di ujung, mempertahankan isinya.- Buka sebelum digunakan, tutup setelah. File memiliki satu mode pada satu waktu.
Cocokkan setiap mode buka file dengan apa yang dilakukannya.
READ membaca; WRITE mengganti dari awal; APPEND menambahkan ke akhir tanpa kehilangan apa yang ada.
Untuk menambahkan baris ke akhir file yang ada tanpa kehilangan isinya, buka file FOR ____.
WRITE akan memulai file kosong. APPEND mempertahankan apa yang ada dan menulis setelahnya.
Membaca setiap baris
OPENFILE "data.txt" FOR READ
WHILE NOT EOF("data.txt") DO
READFILE "data.txt", LineString
OUTPUT LineString
ENDWHILE
CLOSEFILE "data.txt"
EOFmenguji akhir file. Uji sebelum setiap baca: membaca melewati akhir adalah kesalahan.CLOSEFILEpenting: data terbuffer mungkin hilang dan program lain terkunci keluar dari file yang dibiarkan terbuka.
Menangani file: buka → gunakan → tutup
Ikuti siklus hidup setiap file. Dua bagian yang mudah dilupakan adalah menguji EOF saat membaca dalam loop, dan selalu menutup di akhir.
Apa yang diuji oleh EOF?
EOF (akhir file) dicek sebelum setiap baca agar loop berhenti ketika tidak ada data lagi.
Mengapa Anda harus selalu menutup file setelah menggunakannya?
Menutup mem flush penulisan terbuffer ke disk dan melepaskan kunci agar program lain dapat menggunakan file.
Menulis baris
OPENFILE "log.txt" FOR WRITE
FOR i ← 1 TO 100
WRITEFILE "log.txt", "Event " & NUM_TO_STR(i)
NEXT i
CLOSEFILE "log.txt"
WRITEmemulai file kosong. Untuk menambah log yang harus mempertahankan sejarahnya, buka denganFOR APPEND.- File teks menampung string: angka dikonversi dengan
NUM_TO_STRsaat keluar.
Contoh dikerjakan: tiga baris terakhir file
- Tulis prosedur
LastLines(FileName)yang menampilkan tiga baris terakhir file teks, berurutan.
PROCEDURE LastLines(BYVAL FileName : STRING)
DECLARE LineX, LineY, LineZ : STRING
LineX ← ""
LineY ← ""
LineZ ← ""
OPENFILE FileName FOR READ
WHILE NOT EOF(FileName) DO
LineX ← LineY
LineY ← LineZ
READFILE FileName, LineZ
ENDWHILE
CLOSEFILE FileName
OUTPUT LineX
OUTPUT LineY
OUTPUT LineZ
ENDPROCEDURE
- Setiap baris baru mendorong baris sebelumnya maju, sehingga pada
EOFketiga variabel memegang tiga baris terakhir; file lebih pendek menampilkan string kosong. Untuk lima baris pertama, hitung pembacaan dan hentikan di lima atau diEOF, mana yang terjadi lebih dulu. File kosong membuatEOFbenar segera setelah dibuka.
Susun langkah-langkah prosedur LastLines secara berurutan.
Inisialisasi, buka, loop dengan geser sebelum baca, tutup, output. Menggeser setelah baca akan kehilangan baris terbaru.
Medan dalam baris
- Catatan ditulis sebagai satu baris, medannya digabung oleh karakter pemisah, dan setiap angka atau Boolean dikonversi dengan
NUM_TO_STR(dan dibaca kembali denganSTR_TO_NUM, atau dengan membandingkan dengan"TRUE"). - Pilih pemisah yang tidak akan pernah muncul dalam data: koma atau
|untuk nama dan angka; jangan gunakan spasi jika nama mungkin mengandung spasi. - Membaca kembali: baca baris, pisahkan pada pemisah, konversikan setiap bidang ke tipenya, simpan dalam rekaman.

Gabungkan dengan pemisah untuk menulis; pisahkan dan konversikan untuk membaca
Sebuah baris menyimpan nama lengkap pemain dan skor. Pemisah mana yang merupakan pilihan paling aman?
Pemisah tidak boleh muncul di dalam field. Nama lengkap mengandung spasi, dan skor mengandung digit.
INTEGER dapat ditulis langsung ke file teks, tanpa dikonversi ke string terlebih dahulu.
File teks berisi baris karakter. Konversikan dengan NUM_TO_STR untuk menulis dan STR_TO_NUM untuk membaca kembali.
Contoh terpecahkan: simpan rekaman, muat kembali
- Sebuah rekaman
Playermemiliki bidangName : STRINGdanScore : INTEGER. Tulis pseudocode untuk menambahkannya kescores.txtsebagai satu baris, dan untuk membaca satu baris kembali ke rekaman.
OPENFILE "scores.txt" FOR APPEND
WRITEFILE "scores.txt", Player.Name & "," & NUM_TO_STR(Player.Score)
CLOSEFILE "scores.txt"
OPENFILE "scores.txt" FOR READ
READFILE "scores.txt", Line
Pos ← POSITION(Line, ",")
Player.Name ← LEFT(Line, Pos - 1)
Player.Score ← STR_TO_NUM(MID(Line, Pos + 1, LENGTH(Line) - Pos))
CLOSEFILE "scores.txt"
- Nilai: mode yang tepat, konversi angka dalam kedua arah, pemisah yang tidak dapat terjadi dalam nama, dan kedua file ditutup.
Untuk menyimpan record sebagai satu baris file teks, program harus: pilih semua yang berlaku.
Konversi, gabung, tulis, tutup. File teks tidak memiliki tata letak biner; itulah yang dilakukan file biner.
Akses serial dan langsung
- File teks bersifat serial (berurutan): dibaca dari awal secara berurutan, sehingga menemukan satu baris berarti membaca semua baris sebelumnya.
- Akses langsung (acak) melompat langsung ke rekaman pada posisi yang dihitung tanpa membaca yang lain; ini memerlukan rekaman panjang tetap, yang tidak dimiliki file teks.
- Untuk silabus, perulangan file teks di atas adalah modelnya: buka, uji
EOF, baca, tutup.
Akses langsung (acak) memungkinkan program melompat langsung ke record tanpa membaca yang lain terlebih dahulu.
Akses serial harus membaca dari awal.
⟦⟧ Nilai yang sering terlewat
- Membaca melebihi akhir. Uji
EOFsebelum setiapREADFILE. - Membuka
FOR WRITEketika file harus mempertahankan isinya. Itu adalahAPPEND. - Menulis angka tanpa
NUM_TO_STR, atau membacanya kembali tanpaSTR_TO_NUM. File teks menyimpan string. - Melupakan
CLOSEFILE, atau menggunakan file sebelumOPENFILE. Keduanya kehilangan nilai untuk penanganan file.
Anda telah memahaminya
- File memberikan persistensi: data bertahan setelah program berakhir, dapat dibagikan, dan dapat melebihi memori
OPENFILE … FOR READ | WRITE | APPEND→READFILE/WRITEFILE→CLOSEFILE;WRITEmenimpa,APPENDmenambahkan di akhir- uji
EOFsebelum setiap baca; konversikan angka denganNUM_TO_STRkeluar danSTR_TO_NUMmasuk kembali - satu rekaman = satu baris, bidang digabungkan oleh pemisah yang tidak pernah muncul dalam data