Matakuliah : T0016 / Algoritma dan Pemrograman Tahun : 2007 Versi : 6 Pertemuan 21-22 File
Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : Mendemonstrasikan program yang berisi aplikasi untuk membaca, menulis (read, write) data ke file text atau biner (C3)
Fungsi Input Output file Outline Materi Stream Definisi file Tipe file File teks dan biner Fungsi Input Output file
STREAM Supaya data yang di-key-in melalui keyboard tidak hilang (saat komputer dimatikan) maka perlu disimpan ke dalam secondary storage device sebagai file data Stream ialah kumpulan karakter yang disusun dalam baris-baris yang berpindah dari satu media ke media lain pada sistem komputer. Semua data masukan dan keluaran berupa stream. Bahasa C memperlakukan file sebagai stream.
STREAM Saat program C dijalankan maka tiga buah stream standar OTOMATIS diaktifkan: 1. Standard Input Stream, mengatur aliran data masukan melalui ketikan keyboard 2. Standard Output Stream, mengatur aliran data keluaran ke layar monitor 3. Standard Error Stream, mengatur tampilan pesan kesalahan ke layar monitor Masing-masing stream berasosiasi dengan sebuah file.
Definisi File File File adalah kumpulan record Record adalah kumpulan field Field kumpulan byte Byte dalah kumpulan bit
FILE Operasi membuka (mengaktifkan) sebuah file mengakibatkan sebuah POINTER dikembalikan kepada instruksi pemanggil. Pointer ini menunjuk ke sebuah struktur data bertipe FILE yang sudah didefinisikan di stdio.h Standard input stream Standard output stream Standard error stream stdin stdout stderr stream File pointer
FILE FILE *filepointer; typedef struct { int level; // fill/empty level of buffer unsigned flags; // File status flags char fd; // File descriptor unsigned char hold; // Ungetc char if no buffer int bsize; // Buffer size unsigned char *buffer; // Data transfer buffer unsigned char *curp; // Current active pointer unsigned istemp; // Temporary file indicator short token; //Used for validity checking } FILE; FILE *filepointer;
JENIS FILE TEXT FILE ialah berkas yang disimpan dalam format teks. Biasanya diistilahkan dengan FILE ASCII. besarnya storage penyimpanan disesuaikan dengan jumlah angka bilangan: 10000 perlu 5 byte isi file dapat ‘dibaca’ dengan menggunakan editor teks isi file dapat ‘dibaca’ dengan c:>TYPE namafile BINARY FILE menyimpan data numerik dalam format yang tetap sesuai ketentuan micro-processor (misanya dengan format sign-magnitude 2’s complement), tidak bergantung pada jumlah digit bilangan.
Sintaks pembentukan buffer area Buffer area adalah bagian dari memori yang digunakan sebagai tempat penampungan sementara sebelum data dipindahkan ke file. Sintaks pembentukan buffer area FILE *fp; Dimana fp adalah variabel file pointer yang digunakan untuk menunjuk awal buffer area. Dikenal juga dengan nama stream pointer.
Membuka File Untuk membuka file digunakan fungsi fopen(), sintak sbb: FILE *fopen( const char *filename, const char *mode ); Fungsi fopen() didefinisikan di <stdio.h> Fungsi fopen() mengembalikan pointer ke awal buffer area. Nilai null dikembalikan jika berkas tidak dapat dibuka.
Nilai mode operasi yang mungkin adalah Mode Makna Membuka File Nilai mode operasi yang mungkin adalah Mode Makna “r” Membuka file utuk dibaca. “w” Membentuk file baru untuk ditulisi. “a” Membuka file untuk tambah data. “r+” Membuka file untuk dibaca/ditulisi. “w+” Membentuk file untuk dibaca/ditulisi. “a+” Membuka file untuk dibaca dan ditambah isinya “rb” Membuka file biner untuk dibaca “wb” Membentuk file biner untuk ditulid
File ditutup dengan menggunakan fungsi fclose(), sintak : Menutup File File ditutup dengan menggunakan fungsi fclose(), sintak : int fclose( FILE *stream ); Fungsi fclose() didefinisikan di <stdio.h> Fungsi fclose() akan mengembalikan nilai 0 jika sukses, dan EOF jika error EOF (End Of File) nilainya -1 Fungsi fclose() akan membebaskan buffer agar dapat digunakan oleh file lain dan mengirim data yang masih tertinggal di buffer agar segera dikirim ke file.
Fungsi fcloseall() dengan sintak : Menutup File Fungsi fcloseall() dengan sintak : int fcloseall (void); Function ini menutup seluruh stream yang aktif KECUALI stdin, stdout, stdprn, stderr, dan stdaux. Apabila proses berhasil maka dikembalikan bilangan yang menyatakan jumlah stream yang berhasil ditutup. Apabila terjadi kesalahan maka dikembalikan EOF. Header file (stdio.h>
Fungsi Input Output File fgetc Membaca satu karakter dari file fgetc( stdin ) ekuivalen dengan getchar() Sintak : int fgetc( FILE *stream ); Mengembalikan karakter yang dibaca jika sukses, dan mengembalikan EOF jika error fputc Menulis satu karakter ke file fputc( 'a', stdout ) ekuivalen dengan putchar( 'a' ) Sintak: int fputc( int c, FILE *stream ); Mengembalikan karakter yang ditulis jika sukses, dan mengembalikan EOF jika error
Fungsi Input Output File fgets Sintak: char *fgets( char *string, int n, FILE *stream ); Membaca satu baris dari file yang diakhiri dengan new line, atau maximum n-1 karakter Mengembalikan string jika sukses dan mengembalikan NULL jika error fputs Menulis satu baris ke file Sintak: int fputs( const char *string, FILE *stream ); Mengembalikan nilai non-negatif jika sukses, dan mengembalikan EOF jika error
Fungsi Input Output File fscanf Sintak: int fscanf( FILE *stream, const char *format [, argument ]... ); Membaca data dari file dengan format sesuai dengan format scanf. Mengembalikan nilai yang menyatakan jumlah field yang sukses dibaca, dan mengembalikan EOF jika error fprintf Sintak: int fprintf( FILE *stream, const char *format [, argument ]...); Menulis data ke file dengan format sesuai dengan format printf. Mengembalikan nilai yang menyatakan jumlah byte yang sukses ditulis, dan mengembalikan nilai negatif jika error
Fungsi Input Output File fwrite Sintak: size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream ); Menulis satu block data yg ada di buffer ke file Mengembalikan jumlah byte data yang ditulis jika sukses, dan error jika return value nya lebih kecil dari size data yang ditulis fread Sintak: size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); Membaca satu block data sebesar size dari file feof Sintak : int feof( FILE *stream ); Untuk ngetest apakah posisi pointer sudah di end-of-file Mengembalikan 0 jika belum end-of-file
Fungsi Input Output File Contoh : fwrite( &mhs, sizeof( mhs ), 1, fp ); &mhs = lokasi asal data sizeof( mhs ) = mengembalikan nilai ukuran dari mhs 1 => 1 kali write sebesar sizeof(mhs) fp = file pointer
File : Contoh Contoh : #include <stdio.h> void main( void ) { FILE *stream; char *p, buffer[] = "This is the line of output\n"; int ch; ch = 0; stream = stdout; for( p = buffer; (ch != EOF) && (*p != '\0'); p++ ) ch = putc( *p, stream ); } Output: This is the line of output
File : Contoh Contoh program untuk membaca file fgetc.c #include <stdio.h> int main(void) { char ch; FILE *fp; fp=fopen("fgetc.c","r"); if(fp==NULL){ printf("File fgetc.c tidak bisa dibuka\n"); exit(1); } while(!feof(fp)){ ch=fgetc(fp); printf("%c",ch); fclose(fp); return 0;
File : Contoh Contoh menulis string ke file test.txt dengan fputc #include <stdio.h> int main(void) { FILE *fp; int i; char ss[80]="Kalimat ini disimpan ke file test.txt dengan fputc"; fp=fopen("test.txt","w"); if(fp==NULL){ printf("File test.txt tidak bisa create\n"); exit(1); } for(i=0; i<strlen(ss); i++) fputc(ss[i], fp); fclose(fp); return 0;
File : Contoh Contoh membaca file fgets.c dengan fgets #include <stdio.h> int main(void) { FILE *fp; char ss[80]; fp=fopen("fgets.c","r"); if(fp==NULL){ printf("File fgets.c tidak bisa di open\n"); exit(1); } while(fgets(ss, 80, fp)) printf("%s",ss); fclose(fp); return 0;
File : Contoh Contoh menulis string ke file test.txt dengan fputs #include <stdio.h> int main(void) { FILE *fp; char ss[80]="Kalimat ini ditulis ke file test.txt dengan fputs"; fp=fopen("test.txt","w"); if(fp==NULL){ printf("File test.txt tidak bisa di create\n"); exit(1); } fputs(ss, fp); fclose(fp); return 0;
Contoh menulis data ke file test.txt dengan fprintf File : Contoh Contoh menulis data ke file test.txt dengan fprintf #include <stdio.h> int main(void) { FILE *fp; fp=fopen("test.txt","w"); if(fp==NULL){ printf("File test.txt tidak bisa di create\n"); exit(1); } fprintf(fp,"%d %s %f\n",1,“Amir", 3.95); fprintf(fp,"%d %s %f\n",2,“Tono", 3.15); fclose(fp); return 0;
Contoh membaca data dari file test.txt dengan fscanf File : Contoh Contoh membaca data dari file test.txt dengan fscanf #include <stdio.h> int main(void) { FILE *fp; int no; char nama[20]; float ipk; fp=fopen("test.txt","r"); if(fp==NULL){ printf("File test.txt tidak bisa di open\n"); exit(1); } fscanf(fp,"%d %s %f",&no,nama, &ipk); printf("%d %s %f\n",no,nama,ipk); fclose(fp); return 0;
File : Contoh Contoh menulis data ke file biner test.dat dengan fwrite #include <stdio.h> int main(void) { FILE *fp; int Arr[]={1,2,3,4,5}; fp=fopen("test.dat","w"); if(fp==NULL){ printf("File test.dat tidak bisa di create\n"); exit(1); } fwrite(Arr,sizeof(Arr),1,fp); fclose(fp); return 0;
File : Contoh Contoh membaca data dari file biner test.dat dengan fread #include <stdio.h> int main(void) { FILE *fp; int i; int Arr[5]; fp=fopen("test.dat","r"); if(fp==NULL){ printf("File test.dat tidak bisa di open\n"); exit(1); } fread(Arr,sizeof(Arr),1,fp); for(i=0; i<5; i++) printf("%d ",Arr[i]); fclose(fp); return 0;
Latihan-1 Sebuah text file berisi data tanggal lahir karyawan dengan format tgl/bln/thn. Tgl, bln dan thn masing-masing hanya 2 angka. Contoh sbb: 01/06/50 03/06/51 10/02/54 08/01/48 26/08/51 27/04/54 21/09/51 …dst…. Baca file tsb, kemudian tentukan jumlah karyawan yang umurnya sbb: Diatas 51 thn Antara 44 – 51 Thn Antara 36 – 43 Thn Antara 28 – 35 Thn Dibawah 28 Thn (Catatan : Umur = Thn sekarang – thn lahir)
Latihan-2 struct Mhs{ char nama[20]; int nim; float ipk; }; Buat file biner dengan menggunakan fwrite, untuk menyimpan 5 record data Mahasiswa dengan struc Mhs seperti diatas. Data nama, nim dan ipk di input dari keyboard. Nama file dibuat dengan nama Mhs.dat
Latihan-3 Bacalah file Mhs.dat pada latihan sebelumnya diatas, dengan fungsi fread, kemudian tampilkan hasilnya dilayar monitor dengan format sbb: Nim Nama Ipk ------ -------- ----
Latihan-4 Bukalah file Mhs.dat pada latihan sebelumnya diatas, kemudian append (tambahkan) 5 record lagi data mahasiswa yang diinput dari keyboard.
Latihan-5 Jelaskan dan berikan contoh program yang menggunakan fungsi rewind() yang sintak nya sbb: void rewind( FILE *stream ); Jelaskan dan berikan contoh program yang menggunakan fungsi fseek() yang sintak nya sbb: int fseek( FILE *stream, long offset, int origin );
Latihan-6 Jelaskan dan berikan contoh program yang menggunakan fungsi ftell() yang sintak nya sbb: long ftell( FILE *stream ); Jelaskan bagaimanakah caranya untuk mengetahui ukuran (size) dari suatu file ?
Buat program untuk delete sebuah file seperti command DOS dibawah ini: Latihan-7 Buat program untuk meng copy sebuah file seperti command DOS dibawah ini: C>copy test.c coba.c Buat program untuk delete sebuah file seperti command DOS dibawah ini: C> del test.c