Pertemuan 12 Pemrograman Terstruktur Pemrosesan File Teks dan File Biner
Tujuan Perkuliahan Mahasiswa mampu membedakan file biner dan file teks Mahasiswa memahami macam-macam operasi file d l dalam fil file tteks k d dan fil file bi biner Mahasiswa dapat membuat program untuk operasi file
Struktur File File adalah Kumpulan data-data yang disimpan dalam disk dalam bentuk suatu kesatuan. Suatu S fil file merupakan k organisasi i id darii sejumlah j l h record. d Masing-masing record dapat terdiri dari satu atau beberapa field dan setiap p field terdiri dari satu atau beberapa p byte. y
Tahapan Operasi File Operasi file pada dasarnya meliputi 3 tahapan : 1 Membuka / mengaktifkan file 1. 2. Melaksanakan Operasi file p File 3. Menutup
Membuka dan Mengaktifkan File Untuk membuka / mengaktifkan file sebelum dapat diakses, digunakan fungsi fopen( ) Syntax : FILE *fopen ( char *namafile, char *mode );
ket : namafile berupa nama dari file yang akan diaktifkan mode berupa jenis operasi yang dilakukan terhadap file prototype t t ada d pada d file fil stdio.h tdi h
Keluaran fungsi fopen ( ) berupa pointer yang menunjuk ke tipe FILE, yaitu tipe struktur yang definisinya ada pada file stdio.h Berhasil-tidaknya operasi pengaktifan file dapat dilihat pada keluaran fungsi fopen ( ). Jika keluaran berupa NULL berarti operasi p pengktifan p g ggagal. g
Jenis Operasi (Mode) File r menyatakan y bahwa file hanya y akan dibaca w menyatakan bahwa file baru dibuat a untuk membuka file yang sudah ada pada disk dan operasii yang dilakukan dil k k adalah d l h operasii penambahan b h data pada file r+ untuk membuka file yyangg sudah ada, dan operasinya berupa pembacaan dan penulisan w+ untuk membuka file dengan tujuan pembacaan atau penulisan. penulisan Jika sudah ada isinya akan dihapus. dihapus a+ untuk membuka file dengan tujuan perekaman atau pembacaan. Jika file berisi maka isinya tidak akan dihapus. dih
Contoh Pemakaian fungsi fopen() pf = fopen (“COBA. TXT”, “w”); Bentuk yang biasa dipakai untuk Maksud M k d dari d i pernyataan mengaktifkan file adalah : tersebut adalah : if ( pf = fopen (“COBA. TXT”, ”w” ) Menciptakan dan == NULL ) mengaktifkan file { cputs (“File tidak dapat diciptakan bernama “COBA.TXT” !”); Dengan mode yaitu “w” w exit ( 1 ); } //*Keluar Keluar dari program program*// (mode penulisan file) Mula-mula pf diisi dengan keluaran fungsi fopen ( ). Seandainya nilainya Menempatkan pointeradalah d NULL U (berarti (b operasi p ke-FILE ke FILE ke variable pengaktifan file gagal) pointer pf maka : Pada layar ditampilkan tulisan “File File tidak dapat dibuka!” Program dihentikan / selesai
Menutup File Untuk menutup file, fungsi yang digunakan adalah fclose ( ). Bentuk deklarasinya adalah : int fclose ( FILE *pf ); Fungsi fclose ( ) menghasilkan keluaran berupa nol jika operasi penutupan file berhasil dilakukan dilakukan. Disamping fclose ( ) terdapat fungsi fcloseall ( ) yang kegunaanya adalah untuk menutup semua file yang sedang terbuka. terbuka Bentuk deklarasinya : int fcloseall (void); Fungsi fcloseall ( ) menghasilkan nilai EOF (EOF didefinisikan pada file stdio stdio.h, h yaitu bernilai -1) jika terjadi kegagalan. Sedangkan jika berhasil, keluaran fungsi berupa jumlah file yang ditutup.
Operasi Penyimpanan dan Pembacaan File per Karakter Sebuah karakter dapat disimpan dalam file dengan menggunakan fungsi fputc ( ). Bentuk deklarasinya : int fputc ( int kar, FILE *ptr_file ); dengan
ptr_file adalah pointer-ke-FILE yang berisi keluaran dari fopen ( ), dan kar berupa karakter yang akan disimpan dalam file. file
Contoh Pembacaan File per Karakter Contoh Program yang digunakan untuk membaca isi file COBA.TXT, dengan langkah sebagai berikut : Buka file COBA COBA. TXT dengan mode “r” r . Jika tak berhasil dibuka beri keterangan bahwa file tidak ada, selesai. Baca sebuah karakter dari file. Jika karakter sama dengan EOF (tanda akhir file) maka langkah ke 4 Tampilkan karakter ke layar dan kembali le langkah 2 Tutup p file Selesai
Program Pembacaan File per Karakter #include <stdio.h> #include
conio.h main( ) { FILE*pf; char h kkar; clrscr( ); if ((pf = fopen (“COB. TXT”, “r”)) = = NULL ) { cputs (“File tak dapat dibuka !\r\n”); exit;; } while ( (kar = getc (pf) ) !=EOF ) putch (kar); fclose (pf); }
Contoh Eksekusi : A>GETC TURBO C-
File Teks dan File Biner File teks merupakan file yang pola penyimpanan datanya dalam bentuk karakter. Misalnya bilangan bertipe int bisa saja menempati ruang 1 byte, 2 byte atau lebih, tergantung oleh nilai dari bilangan. Fil bi File biner adalah d l h fil file yang pola l penyimpanan i di d dalam l disk adalah dalam bentuk biner, yaitu seperti bentuk padsa memory (RAM) komputer komputer. Misalnya data bertipe int akan selalu menempati ruang 2 byte berapapun p p harganya. g y
Perbedaan File Teks dan File Biner File teks dipakai untuk menyimpan data bertipe g p karakter atau stringg sedangkan file biner dipakai untuk menyimpan data bilangan atau data kompleks, seperti struktur (tipe struct). P d file Pada fil teks k , karakter k k ‘\n’ ‘\ ’ pada d program akan k diperlakukan sebagai CR/LF bagi MS-DOS dan CR/LF ber-ASCII ( artinya CR atau ber ASCII 13 diikuti dengan LF atau ber-ASCII 10) pada MS-DOS akan diterjemahkan sebagai ‘\n’ bagi program. Sedangkan pada file biner, karakter k kt ‘\n’ ‘\ ’ pada d program akan k diperlakukan di l k k sebagai b i LF saja bagi MS-DOS dan karakter LF bagi MS-DOS dianggap gg p sebagai g ‘\n’ \ bagg i program. p g
Mode pada file Teks dan File Biner Penambahan yang perlu dilakukan untuk menentukan mode teks atau mode biner berupa : “t” untuk mode teks dan “b” untukk mode d biner. bi Contoh :
• “ rt ” berarti mode file adalah teks dan file akan dibaca • “ rt+ “ berarti mode file adalah teks dan file bisa dibaca atau ditulisi • “ rb “ berarti mode file adalah biner dan hendak dibaca
Mode pada file Teks dan File Biner (cont (cont..)) Jika pada mode file tidak terdapat karakter t atau b, mode file akan ditentukan oleh variable global bernama _fmode ( deklarasinya ada pada file fcntl.h). Jika _fmode tidak dilibatkan dalam program, maka mode file yang tidak mengandung t atau b akan dianggap sebagai file teks. V i bl _fmode Variable f d bisa bi diisi dii i d dengan O_BINARY O BINARY untuk t k menyatakan file biner, atau O_TEXT untuk menyatakan y file text. Contoh : _fmode = O_BINER; pff = fopen f (“TEST1”, (“TEST1” “r”); “ ”) berarti bahwa “TEST1” adalah file biner dan hendak baca.
Operasi Penyimpanan dan Pembacaan File per Int Untuk menyimpan sebuah data bertipe int digunakan fungsi putw( ) Sedangkan untuk membaca sebuah data bertipe int digunakan fungsi getw() Bentuk deklarasinya : i t getw int t (FILE **ptr_file); t fil ) int putw (FILE *ptr_file);
Operasi Pembacaan dan Penyimpanan File per Blok
Fungsi untuk menyimpan file dalam bentuk kesatuan blok (sejumlah byte) adalah fwrite( ) B Bentuk k deklarasi d kl i int fwrite (void *buffer, int jum_byte, int n, FILE *ptr ptr_file); file); Fungsi untuk membaca data file dalam bentuk kesatuan blok ((sejumlah j byte) y ) adalah fread(( ) Bentuk deklarasi : int fread (void*buffer, int n, FILE *ptr_file);
Operasi Pembacaan dan Penyimpanan File per Blok (cont) Ket : Buffer adalah pointer yang menunjuk ke daerah memory yang akan ditempati data dari file disk (untuk fread( )) )), atau pointer yang menunjuk ke daerah memory yang berisi data yang akan disimpan ke file disk (fwrite( )). jum_byte j b t menyatakan t k jjumlah l hb byte t yang akan k dibaca dib atau t disimpan n menentukan banyaknya blok data berukuran jum_byte yang akan ditulis atau dibaca ptr_file berupa pointer-ke-FILE yang berisi nilai keluaran dari p () fopen(
Menyimpan dan Membaca Data String pada File Fungsi g yang y g digunakan g untuk membaca data stringg pada p file sampai ditemukannya karakter baris baru ‘\n’ atau setelah ( n-1 ) karakter, dengan n adalah panjang maksimal stringg yang y g dibaca per p waktu-baca adalah fgets( g ( ) Bentuk deklarasinya : char *fgets fgets (char *str str, int n, n FILE *ptr ptr_file); file); Fungsi yang digunakan untuk menyimpan data string ke dalam file yaitu fputs( ). Bentuk deklarasinya : int fputs (char *str, FILE *ptr_file);
Menyimpan dan Membaca File yang diformat Fungsi yang digunakan untuk menyimpan data bilangan yang diformat ke dalam file yaitu fprintf( ), dengan bentuk : fprintf (ptr_file, “string kontrol”, daftar argumen);
Sedangkan untuk membaca kembali, fungsi yang digunakan berupa fscanf( ), dengan bentuk : fscanf (ptr_file, (ptr file “string string kontrol” kontrol , daftar argumen); Kedua fungsi g diatas berlaku seperti p fungsi g printf( p ( ) dan scanf( ), hanya saja operasinya pada file.
Pengaksesan File Biner Secara Acak Fungsi g yang y g digunakan g untuk mengakses g file biner secara acak adalah fseek( ). Bentuk deklarasinya : int fseek (FILE *ptr_file, long int ofset, int posisi); dengan : - ptr_file adalah pointer yang keluar berasal dari keluaran fopen( ) - ofset f t menyatakan t k jjumlah l hb byte t tterhadap h d posisi ii Kegunaan fungsi fseek( ) yaitu untuk menempatkan penunjuk file ke suatu lokasi dalam file, berdasarkan ofset dan posisi.
Pengaksesan File Biner Secara Acak (Contoh) fseek (pf, 3, SEEK SEEK_SET); SET); Pernyataan tersebut menempatkan penunjuk file ke posisi 3 byte p y sesudah awal file (SEEK ( _SET). ) fseek (pf, 3, SEEK_END); Pernyataan y ini akan menempatkan p penunjuk p file ke posisi 3 byte sebelum akhir file fseek (pf, 3, SEEK_CUR); Pernyataan ini dipakai untuk menempatkan penunjuk file ke posisi 3 byte sesudah posisi penunjuk file berada.
Operasi File Tak Berpenampung Operasi File tak berpenampung sering disebut dengan system level I/O (masukan-keluaran beraras system atau low-level (masukan keluaran beraras rendah). (masukan-keluaran rendah) Keuntungannya adalah dalam hal kecepatan pengaksesan (bacatulis).
Fungsi-fungsi dalam Operasi File Tak Berpenampung Fungsi open( ): untuk membuka file (terdapat pada file io.h) Bentuk deklarasi : int _open (char *filename, int mode); dengan mode dapat diisi dengan konstanta O_RDONLY, O WRONLY atau O_RDWR, O_WRONLY O RDWR yang didefinisikan pada file fcntl.h Fungsi create( ): untuk menciptakan file baru atau untuk mengosongkan file yang berisi Bentuk deklarasi : int _create (char *namafile, int atrib); d dengan atrib t ib untuk t k menentukan t k atribut t ib t fil file Fungsi fclose( ) : untuk menutup file dengan bentuk deklarasi : int _close (int handle); dengan handle menyatakan kode penanganan file yang diperoleh dari _fopen( ) atau _create( ).
Fungsi-fungsi dalam Operasi File Tak Berpenampung (cont (cont.)) Fungsi _read( ) : untuk membaca isi file. Bentuk deklarasinya : int _read (int handle, void*buffer, unsigned panjang); Fungsi i _write( i ( ) : untukk menulis li ke k file fil Bentuk deklarasinya: int _write write (int handle, handle void *bufer bufer, unsigned panjang); fungsi lseek( ) : untuk memindah penunjuk file (yang memungkinkan pengaksesan file secara acak)) Bentuk deklarasinya : long lseek (int handle, handle long ofset, ofset int posisi);
Menghapus File Fungsi unlink( ) digunakan untuk menghapus File. Bentuk deklarasinya : int unlink (char *namafile); ket:
namafile fil adalah d l h pointer i t yang menunjuk j k kke nama fil file yang akan dihapus.
Mengganti Nama File Fungsi rename( ) digunakan untuk mengganti nama file. Bentuk deklarasinya :
i rename ((char int h **nmafilelama, fil l char h *namafilebaru); * fil b )
Referensi Bab 12, “Text and Binary File Processing”, Problem Solving and Program Design in C, Jeri R. Hanly dan Elliot B B. Koffman Koffman, Addison Wesley Wesley, 2002