Halo, dan selamat datang kembali.
Dalam kuliah ini, saya akan memberikan demonstrasi untuk tantangan kita
sebelumnya, yaitu mencetak konten file dalam urutan terbalik.
Jadi, Anda perlu memahami metode ftel dan metode fseek.
Mari memunculkan blok kode, dan mari buat proyek baru.
Dan proyek ini akan menjadi aplikasi konsol.
Kami hanya
akan menamainya mencetak konten file
secara terbalik.
Dan pertama-tama kita akan membuat file kita yang memiliki beberapa data kosong
di dalamnya karena kita perlu membacanya. Jadi saya akan kembali ke direktori unduhan saya,
di mana proyek blok kode saya berada.
Dan saya akan pergi ke
proyek yang
baru saja saya buat, yang bernama isi file cetak.
Jadi di sini. Saya hanya akan membuat file baru, file teks.
Kami akan mengatakan dokumen teks baru. Kami akan menamakannya tes. teks.
Dan kemudian di dalam sini, saya hanya akan
melakukan hal yang normal
hai nama saya Jason, apa kabar, saya baik-baik saja.
Dan apa yang akan dilakukan ini, saya akan menyimpannya, dan kemudian kita akan mulai mencetak bagian akhirnya.
Jadi harus print out enif space gniod dan seterusnya sampai ke awal.
Jadi kita akan kembali ke blok kode, dan
kita perlu memasukkan IO standar kita karena
itu berisi semua fungsi kita. Kita akan membuat
sebuah konstanta, dalam hal ini define.
Dan ini akan disebut nama file, itu akan disebut tes. teks.
Dan saya harus membuat penunjuk file saya terlebih dahulu, jadi semua huruf besar
FILE star fp, dan saya akan menyetelnya sama dengan nol, inisialisasi.
Dan kemudian saya juga akan membuat beberapa penghitung
dan sesuatu untuk mewakili apa yang dikembalikan -- Saya akan membawa
penghitung untuk loop saya
dan kemudian jumlah byte aktual yang dikembalikan dari ftell.
Jadi saya akan mengatakan itu menghitung sama dengan nol dan
kemudian variabel kontrol loop ke I sama dengan nol.
Aku akan melakukan yang biasa. Saya perlu membuka file saya. Saya akan mengatakan fp sama
dengan fopen, dan saya akan memasukkan nama file. Aku akan lulus di read only jadi hanya r.
Saya akan memastikan ini bukan nol. Jadi saya akan mengatakan jika fp sama dengan nol,
maka saya hanya akan mengembalikan 1 negatif.
Jika tidak, saya akan mencari sampai akhir file.
Jadi saya ingin melakukan fseek.
Di sini saya akan memanggil fungsi fseek.
Ini akan mengubah posisi yang saya tunjuk. Saya akan memasukkan pointer file saya.
Saya akan memberikan nol untuk parameter kedua kami.
Untuk parameter ketiga, saya akan mengatakan mencari sampai akhir.
Jadi saya akan menggunakan akhir pencarian konstan itu.
Dan itu akan mengatur penunjuk file saya ke akhir fp,
yaitu test. teks.
Setelah saya sampai akhir, saya ingin mengatur penghitung saya yang sebenarnya ke
apa yang ditunjuknya adalah ftell. Jadi saya ingin kembali ke tempat saya sekarang.
Jadi di sini saya akan mendapatkan posisi file pointer.
Dan fseek benar-benar mengubah
posisinya, sehingga memindahkan penunjuk file ke akhir file.
Jadi saya memindahkannya dulu dan kemudian saya mendapatkan posisinya. Saya bisa mendapatkan posisi menggunakan ftell.
Untuk ftell, ia mengembalikan posisi, jadi itu akan disimpan di count dan
saya akan mengatakan f count sama dengan f tell dan kemudian meneruskannya di file pointer.
Setelah saya memiliki posisi, saya kemudian dapat menulis loop
sementara yang mengatakan pergi dari posisi atau penghitung yang merupakan variabel kontrol loop saya sampai akhir.
Jadi di sini saya dapat mengatakan sementara saya kurang dari hitungan karena
pada dasarnya saya ingin membaca semuanya dari akhir hingga awal.
Jadi di dalam sini, saya ingin mengatakan kenaikan variabel I saya.
Dan kemudian saya ingin mencari, saya ingin mengubah ke mana saya akan pindah. Jadi saya ingin mengatakan fseek, dan
saya ingin menunjuk ke fp.
Saya ingin menunjuk ke I negatif karena
saya pergi dari belakang ke awal, dan saya ingin mengatakan mencari akhir.
Jadi negatif saya akan menjadi begitu banyak byte dari akhir.
Jadi pertama saya bisa pindah ke akhir dan
kemudian saya ingin mengubah posisi saya sehingga saya bisa mulai membaca di setiap karakter.
Setelah saya benar-benar mencari sampai akhir, maka saya hanya
dapat mencetak karakter, membaca
karakter dan mencetaknya. Jadi di sini saya hanya bisa
mengatakan persen c, dan kemudian saya bisa mengatakan fgetc
dan penunjuk file saya.
Jadi sekali lagi, apa yang saya lakukan di sini adalah pada baris 22 atau 19, pertama,
saya memindahkan pointer saya ke akhir.
Kemudian saya mendapatkan penghitung saya karena itu akan memberi tahu saya berapa lama saya harus membaca di
setiap byte menggunakan ftell.
Kemudian while loop saya akan berubah dari nol sampai ke
hitungan, berapa banyak byte yang ingin saya baca.
Pada baris 26, saya akan meningkatkan penghitung.
Saya kemudian akan mencari begitu banyak byte dari akhir,
yang minus I dari akhir. Dan kemudian baris 28, saya akan membaca karakter itu dan mencetaknya.
Dan itulah logika utama untuk program ini.
Satu-satunya hal lain yang harus saya lakukan adalah saya ingin mencetak umpan baris di
akhir, hanya untuk membuatnya lebih mudah dibaca. Saya ingin menutup penunjuk file saya.
Jadi saya ingin mengatakan fp, dan kemudian saya hanya ingin kembali,
dan saya mungkin ingin mengatur fp sama dengan nol.
Jadi mari kita coba kompilasi ini, dan apa yang akan
kita lihat mudah-mudahan adalah file dicetak dalam urutan terbalik.
Kami tidak mengubah isi file,
kami hanya membacanya dari akhir ke awal menggunakan fungsi posisi kami.
Jadi ketika kita menjalankan ini kita harus
melihat kebalikannya atau kebalikannya. Dan apa yang akan Anda perhatikan di sini adalah kita melihat urutan terbalik.
Jadi pertama-tama kita mencetak file terakhir.
Dan jika kami membuka file itu di direktori unduhan kami,
Anda akan
melihat bahwa itu dicetak sebagai output.
Ini mencetak
enif space gniod dan sebagainya.
Baris terakhir yang dicetak adalah hai nama saya Jason terbalik.
Jadi itu hanya program kecil yang rapi
yang akan menggunakan pointer file untuk memulai dari akhir
dan kemudian pergi ke awal dan mencetak konten dalam urutan terbalik.
Jadi perhatikan bagaimana kita menggunakan fseek, perhatikan bagaimana kita menggunakan ftell.
Fseek memindahkan penunjuk file, ftell benar-benar mendapatkan di mana
Anda berada di lokasi file.
Jadi sekarang Anda dapat menggunakan hitungan untuk mundur.
Dan sekali lagi, gunakan negatif I untuk mengatakan berapa byte dari akhir
dan fgetc dengan penunjuk file.
Saya akan memberikan kode sumber ini sebagai solusi, dan Anda dapat membandingkannya dan melihatnya
serta menganalisisnya secara lebih rinci. Semoga ini membantu. Terima kasih.