E N D
Struktur File File atauberkasmerupakansekumpulan data yang disimpandalameksternalmemori. File terdiridarisejumlah record, sedangkan record terdiridarisejumlah field dan field terdiridarisejumlah byte (8 bit). Sehinggastruktur file dapatdigambarkansbb.: File Record ●●● Record Field Field Field Byte Byte Byte
TahapanOperasi File Tigatahapanoperasi file: • Membuka file • Melakukanprosesmembaca, menulis, menghapus, merubah data dari file • Menutup file
Membuka File • Fungsi yang digunakanadalah: fopen() yang beradadalam file header stdio.h • Deklarasifungsifopen(): FILE *fopen(char *namafile, char *mode); Dimana: • Namafileadalahnama-file (identifier) yang akandibuka • Mode adalahjenisoperasi yang dapatdilakukanthd file
Mode Operasi File Jenis (mode) operasi file
ContohMembuka File FILE *pf; //deklarasivariabel FILE pf pf = fopen(“data.txt”, “w”); //membuat & membuka file “data.txt” //dg mode “w” & pointer FILE ke pf. • Bila file “data.txt” sudahada, maka data sebelumnyadihapus. • Bilatidakberhasilmembuat FILE “data.txt”, makapfbernilai NULL. • Sehinggaumumnyadigunakansbb.: if (pf=fopen(“data.txt”,”w”) == NULL) { puts(“File gagaldibuat.”); exit(1); //keluar program }
Menutup File • Fungsiygdipakaifclose(), dg definisifungsisbb.: intfclose(FILE *pf); • Prototipefungsiberadadi file header stdio.h • Jikaberhasilmenghasilkannilai 0 (nol). • Untukmenutupsemua file dapatdigunakan: intfcloseall(void); • Menghasilkannilai EOF (-1) bilagagal. • Menghasilkanjumlah file ygditutupbilaberhasil.
Menulis data File per Karakter • Fungsi yang digunakanfputc(), terdapatdalam file header stdio.h. • Bentukdeklarasifungsi: intfputc(intkar, FILE *ptr_file); • Bilaberhasil, nilaipengembalianfungsisamadengankar. Bilatidakberhasil, nilaipengembalianfungsiberupa EOF (-1).
ContohMenyimpan data per karakterke File #include<stdio.h> #include<conio.h> #include<stdlib.h> #define CTL_Z 26 int main(){ FILE *pf; char kar; if((pf=fopen("data.txt","w"))==NULL){ puts("Gagalmembuka file.....!!!!\n"); exit(1); } while ((kar=getche()) != CTL_Z) putc(kar,pf); fclose(pf); getch(); return (0); }
Membaca data File per Karakter • Fungsi yang digunakangetc(), terdapatdalam file header stdio.h. • Bentukdeklarasifungsi: intgetc(FILE *ptr_file); • Bilaberhasil, nilaipengembalianfungsiberupanilaiintdarisebuahkarakterygdibacadari file. Bilatidakberhasil, nilaipengembalianfungsiberupa EOF (-1).
ContohMembaca data per karakterdari File #include<stdio.h> #include<conio.h> #include<stdlib.h> int main(){ FILE *pf; char kar; if((pf=fopen("data.txt",“r"))==NULL){ puts("Gagalmembuka file.....!!!!\n"); exit(1); } while ((kar=getc(pf)) != EOF) putch(kar); fclose(pf); getch(); return (0); }
Jenis File DalamBahasaPemrograman C, terdapat 2 macamjenis file, yaitu: File Biner: merupakanpenyimpanan data didalameksternalmemori (disk) berbentukserangkaiankodebiner, sepertibentukpenyimpanandi RAM. Dipakaiuntukmenyimpan data kompleks, mis: struct. File Teks: merupakanpenyimpanan data didalameksternalmemori (disk) berbentukserangkaiankarakter. Dipakaiuntukmenyimpan data sepertikarakteratau string.
Jenis File • Penentuan file mode teksdan mode binerditandaidenganpenggunaansimbol: • t untuk mode teks • b untuk mode biner • Contoh: "rt" : mode file adalahteksdan file hendakdibaca "rt+” : mode file adalahteksdan file bisadibacadanditulisi. Bisajugaditulis : "r+t" "rb" : mode file adalahbinerdan file hendakdibaca.
Jenis File • Penentuan file mode teksdan mode binerdapatdilakukanmelaluivariabel global _fmode,ygterdapatpada file headerfcntl.h • Variabel _fmodedapatdiisiO_BINARYuntuk file biner, atauO_TEXTuntuk file teks. • Contoh: • _fmode = O_BINER; • pf = fopen(“datafile.dat”,”r”);
OPERASI BACA & TULIS FILE PER INT • Perintah yang digunakan : _putw (), _getw(). • Bentukdeklarasi : Kegunaan : _getw()untukmembacasebuah data bertipeintdari file _putw()untukmenyimpansebuah data bertipeintke file. int _putw(intnilai, FILE *ptr_file); int _getw(FILE *ptr_file);
Contoh Program Tulis per int Masukkan banyaknya data : 3 Bilangan yang disimpan : 70 Bilangan yang disimpan : 80 Bilangan yang disimpan : 90 #include <stdio.h> #include <stdlib.h> Int main( ) { FILE *pf; /* ptr-ke-FILE */ intnilai, data, i; char jawab; if((pf=fopen("BILANGAN.DAT", "wb")) == NULL ) { printf("file gagaldiciptakan!\n"); exit(1); } printf ("Masukkanbanyaknya data : "); scanf ("%d",&data); for (i=0;i<data;i++) { printf("\nBilangan yang disimpan: "); scanf("%d", &nilai); /* bacanilaidr keyboard */ _putw(nilai, pf); /* bacabilanganke file */ } printf("\nOke. Data sudahdisimpandalam file.\n"); fclose(pf); /* menutup file */ }
Contoh Program Baca per int Isi file BILANGAN.DAT : 1. 70 2. 80 3. 90 #include <stdio.h> #include <stdlib.h> int main() { FILE *pf; /* ptrke file */ intnilai, nomor = 0; /* Buka file bineruntukdibaca */ if((pf=fopen("BILANGAN.DAT","rb")) == NULL) { printf("File gagaldibuka.\n"); exit(1); } printf("Isi file BILANGAN.DAT : \n"); while(1) { /* file berhasildibuka */ nilai= _getw(pf); /* Baca sebuahintdr file */ if (feof(pf) != 0) break; /*Jikaakhir file, keluar loop*/ printf("%2d. %d \n", ++nomor, nilai); /* Tampilkankelayar */ } fclose(pf); /* Tutup file */ return(0); }
OPERASI BACA & TULIS FILE PER BLOK • Fungsi : untukmenyimpanataumembaca data file dalambentukkesatuanblok (sejumlah byte), misal float ataustruct. • Perintah yang digunakan : fread () danfwrite (); • Bentukdeklarasi : Dimana: buffer : pointer yang menunjukkealamatmemori jum_byte : jumlah byte yang akandibacaataudisimpan n : byknyablok data berukuranjum_byteygakanditulis / dibaca ptr_file: pointer-ke-FILE yang berisinilaikeluarandarifopen(). intfread(void *buffer, int n, FILE *ptr_file); intfwrite(void *buffer, intjum_byte, int n, FILE *ptr_file);
Contoh Program TulisStruktur #include <stdio.h> #include <stdlib.h> Int main() { FILE *f_struktur; char jawaban; intsudah_benar; struct{ char judul[20]; char pengarang[20]; intjumlah; } buku; /* variabelbukubertipestruktur */ if((f_struktur = fopen("DAFBUKU.DAT", "wb")) == NULL) { printf("File tidakdapatdiciptakan !\n"); exit(1); }
Contoh Program Tulis Struktur Lanjutan do {fflush(stdin); /* Hapusisipenampung keyboard */ printf("Judulbuku : "); gets(buku.judul); printf("Namapengarang : "); gets(buku.pengarang); printf("Jumlahbuku : "); scanf("%d", &buku.jumlah); fflush(stdin); /* Hapusisipenampung keyboard */ /* Rekamsebuah data bertipestruktur */ fwrite(&buku, sizeof(buku), 1, f_struktur); printf("\nMaumerekam data lagi [Y/T] ?"); jawaban = getchar(); printf("\n"); } while(jawaban == 'Y' || jawaban == 'y'); fclose(f_struktur); /* Tutup file */ return(0); }
Contoh Program Baca Struktur #include <stdio.h> #include <stdlib.h> int main() { FILE *f_struktur; inti=1; struct{ char judul[20]; char pengarang[20]; intjumlah; } buku; /* variabelbukubertipestruktur */ if((f_struktur = fopen("DAFBUKU.DAT", "rb")) == NULL) { printf("File tidakdapatdibuka !\n"); exit(1); } printf("%2s. %-30s %-30s %s\n\n", "No", "JudulBuku", "NamaPengarang", "Jumlah"); /* diulangselamamasihada record ygterbacadlm file */ while(fread(&buku, sizeof(buku), 1, f_struktur) == 1) printf("%2d. %-30s %-30s %4d\n", i++, buku.judul, buku.pengarang, buku.jumlah); printf("\n"); fclose(f_struktur); /* Tutup file */ return(0); } Ukuran char-nya harus sama dengan yang di program tulis
OPERASI BACA & SIMPAN DATA STRING PADA FILE • Perintah yang digunakan : fgets()danfputs(). • Bentukdeklarasi : Kegunaan: fputs() : menyimpan string strkedalam file. fgets() : membaca string dari file sampaiditemukannyakarakterbaris baru '\n' atausetelah (n-1) karakter, dengan n adalahpanjang maksimal string yang dibaca per waktu-baca. intfputs(char *str, FILE *ptr_file); char fgets(char *str, int n, FILE *ptr_file); Note : • Saatsimpan, fputs()tidakmenambahkankarakterbaris-baru ('\n') dengansendirinya, dankarakter null tidakikutdisimpan. • Baikfgets()maupunfputs()digunakanuntuk file teks.
Contoh Program Tulis-1 #include <stdio.h> #include <stdlib.h> int main( ) { FILE *pf; /* ptr-ke-FILE */ intdata, i; char nama[40]; if((pf=fopen("latihan.txt", "w")) == NULL ) { printf("file gagaldiciptakan!\n"); exit(1); } printf("Masukkanbanyaknya data : "); scanf("%d",&data); for (i=1;i<=data;i++) { printf("\nNamake %d : ",i); fflush(stdin); gets(nama); strcat(nama,”\n”); fputs(nama, pf); } printf("\nOke. Data sudahdisimpandalam file.\n"); fclose(pf); /* menutup file */ return(0); }
Contoh Program Tulis-2 #include <stdio.h> #include <stdlib.h> int main( ) { FILE *pf; /* ptr-ke-FILE */ intdata, i; char nama[40]; if((pf=fopen("latihan.txt", "w")) == NULL ) { printf("file gagaldiciptakan!\n"); exit(1); } printf("\nNamake %d : ",i); fflush(stdin); gets(nama); fputs(nama, pf); printf("\nOke. Data sudahdisimpandalam file.\n"); fclose(pf); /* menutup file */ return(0); }
Contoh Program Baca #include <stdio.h> #include <stdlib.h> int main( ) { FILE *pf; /* ptr-ke-FILE */ intdata, i; char nama[40]; if((pf=fopen("latihan.txt", "r")) == NULL ) { printf("file gagaldibuka!\n"); exit(1); } /*Baca file per string (6 char) sampaiditemui EOF*/ while (fgets(nama,6,pf)) printf("%s\n",nama); fclose(pf); /* menutup file */ return(0); }
Akses File BinersecaraAcak • Tujuan: membaca data ditengah file secaracepat. • Fungsi yang digunakan : fseek (). • Bentukdeklarasi : dengan : ptr_fileadalah pointer yang berasaldarikeluaranfopen() offsetmenyatakanjumlah byte terhadapposisi posisidapatdiisisuatunilai yang terterapadatabel intfseek(FILE *ptr_file, long int offset, intposisi); Prototype : stdio.h
ContohAplikasifseek() • fseek(pf, 3, SEEK_SET); • fseek(pf, 3, SEEK_CURR); • fseek(pf, 3, SEEK_END);
Contoh Program fseek()UntukMencariKarakter #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *pf; char kar,jawab; inti, no_record; long intoffset_byte; if((pf = fopen("latihan.txt", "r")) == NULL) { printf("File tidakdapatdibuka !\n"); exit(1); } do { printf(“\n Nomor record dr data ygmauditampilkan : "); scanf("%d", &no_record); offset_byte= (no_record-1); fseek(pf, offset_byte, SEEK_SET); kar=fgetc(pf); /* bacakardari file */ putchar(kar); /* tampilkankelayar*/ printf("\nMaumencobalagi (Y/T)? "); jawab=getche(); } while (jawab == 'y' || jawab == 'Y'); printf("\n"); fclose(pf); /* Tutup file */ return(0); }
Contoh Program fseek() UntukMencariBilangan #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *pf; char jawab; inti, no_record,nilai; long intoffset_byte; if((pf = fopen("bilangan.dat", "rb")) == NULL) { printf("File tidakdapatdibuka !\n"); exit(1); } do { printf(“\nNomorrecord dr data ygmauditampilkan : "); scanf("%d", &no_record); offset_byte= (no_record-1)*sizeof (int); fseek(pf, offset_byte, SEEK_SET); nilai= _getw(pf); /* Baca sebuahintdr file */ printf("%d \n",nilai); printf("\nMaumencobalagi (Y/T)? "); jawab=getche(); } while (jawab == 'y' || jawab == 'Y'); printf("\n"); fclose(pf); /* Tutup file */ return(0); }
Contoh Program fseek() untukMencari String #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *pf; char jawab,nama[20]; inti, no_record; long intoffset_byte; if((pf = fopen("latihan.txt", "r")) == NULL) { printf("File tidakdapatdibuka !\n"); exit(1); } do { printf("\n Nomor record dr data ygmauditampilkan : "); scanf("%d", &no_record); offset_byte= (no_record-1); fseek(pf, offset_byte, SEEK_SET); printf("%s\n",fgets(nama,20,pf)); printf("\nMaumencobalagi (Y/T)? "); jawab=getche(); } while (jawab == 'y' || jawab == 'Y'); printf("\n"); fclose(pf); /* Tutup file */ return (0); }
MENGHAPUS FILE • Bentukdeklarasi: namafile: pointer yang menunjuknamafile yang dihapus • Jikaoperasihapusberhasil, akanmenghasilkan output = 0. • Prototype : stdio.h int remove (char *namafile);
ContohMenghapus File #include <stdio.h> #include <stdlib.h> #define PJG 65 int main() { intkode; char namafile[PJG]; printf("Nama file yang akandihapus: "); gets(namafile); kode= remove(namafile); if(kode == 0) printf("File berhasildihapus\n"); else printf("Gagalmenghapusfile\n"); return(0); }
MENGGANTI NAMA FILE • Bentukdeklarasi: • Jikaoperasihapusberhasil, akanmenghasilkan output = 0. • Prototype : stdio.h int rename(char *namafilelama, char *namafilebaru);
Contoh Program GantiNama File #include <stdio.h> #include <stdlib.h> #define PJG 65 int main() { intkode; char namafilelama[PJG], namafilebaru[PJG]; printf("Nama file yang akandiganti: "); gets(namafilelama); printf("Nama file yang baru: "); gets(namafilebaru); kode= rename(namafilelama, namafilebaru); if(kode == 0) printf("Nama file sudahberhasildiganti\n"); else printf("Gagalmenggantinama file\n"); return (0); }