Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

1 File I/O. 2 Topik Penanganan file Sequential dlm C Dasar-dasar fungsi File I/O Contoh: Menghitung kata dalam file.

Presentasi serupa


Presentasi berjudul: "1 File I/O. 2 Topik Penanganan file Sequential dlm C Dasar-dasar fungsi File I/O Contoh: Menghitung kata dalam file."— Transcript presentasi:

1 1 File I/O

2 2 Topik Penanganan file Sequential dlm C Dasar-dasar fungsi File I/O Contoh: Menghitung kata dalam file

3 3 Penanganan file dalam C File perlu dibuka/opened sblm di pakai. –Di asosiasikan dg "file handler" utk tiap file –Metode: read, write, atau append Fungsi File input/output yg di pakai dalam penanganan file (bukan nama file). Perlu ditutup/close setelah di pakai. Fungsi dasar penanganan file: fopen(), fclose(), fscanf(), fprintf().

4 4 Contoh File I/O Tulis program dengan: –Input daftar nama dari file, misal, names.lst (text file) –Hitung jmlh nama dalam list –Tandai tiap nama dalam file –Output name dan tanda di simpan dalam file names_marks.dat

5 5 File I/O (Header) Step 0: Include stdio.h. #include int main() {... return 0; }

6 6 File I/O (File Pointer) Step 1: Deklarasikan file handler ( file pointer) dg FILE * utk tiap file. int main() { FILE *inputfile = NULL; FILE *outputfile = NULL; FILE *currentfile = NULL;... return 0; }

7 7 File I/O (Open) Step 2: Open file dg fopen(). int main() { FILE *inputfile = NULL; FILE *outputfile = NULL; FILE *currentfile = NULL; inputfile = fopen(“Names.txt”, “r”); outputfile = fopen(“marks.dat”, “w”); currentfile = fopen(“logFile.txt”, “a”);... return 0; }

8 8 File I/O (Open) Step 2: Open file using fopen(). int main() { FILE *inputfile = NULL; FILE *outputfile = NULL; FILE *currentfile = NULL; inputfile = fopen(“Names.txt”, “r”); outputfile = fopen(“marks.dat”, “w”); currentfile = fopen(“logFile.txt”, “a”);... return 0; } Nama file

9 9 File I/O (Open) Step 2: Open file using fopen(). int main() { FILE *inputfile = NULL; FILE *outputfile = NULL; FILE *currentfile = NULL; inputfile = fopen(“Names.txt”, “r”); outputfile = fopen(“marks.dat”, “w”); currentfile = fopen(“logFile.txt”, “a”);... return 0; } Mode r : read w : write a : append Perhatian: mode "w" berarti meng-overwrites file, jika ada.

10 10 File I/O (Open) Step 2: Open file using fopen(). int main() { FILE *inputfile = NULL; FILE *outputfile = NULL; FILE *currentfile = NULL; inputfile = fopen(“Names.txt”, “r”); outputfile = fopen(“marks.dat”, “w”); currentfile = fopen(“logFile.txt”, “a”);... return 0; } Mengasosiasikan file handler utk setiap file yg di pakai

11 11 File I/O (Error Check) Step 3: Check jika file sudah terbuka dg baik. int main() { FILE *inputfile; inputfile = fopen(“Names.txt”, “r”); if (inputfile == NULL) { printf(“Tidak dpt membuka input file\n”); return 1; }... return 0; }

12 12 File I/O (Error Check) Step 3: Check jika file sudah terbuka dg baik. int main() { FILE *inputfile; inputfile = fopen(“Names.txt”, “r”); if (inputfile == NULL) { printf(“Tidak dpt membuka input file\n”); return 1; }... return 0; } File handler Mjd NULL Saat muncul fopen() Error.

13 13 File I/O (Error Check) Step 3: Check jika file sudah terbuka dg baik. int main() { FILE *inputfile; inputfile = fopen(“Names.txt”, “r”); if (inputfile == NULL) { printf(“Tidak dpt membuka input file\n”); return 1; }... return 0; } Akhiri program Jika di dalam Fungsi main ( ).

14 14 File I/O (Input) Step 4a: Pakai fscanf() utk input. #include #define MAXLEN 100 int main() { FILE *inputfile = NULL; char name[MAXLEN]; int count; listnames.c

15 15 File I/O (Input) Step 4a: Pakai fscanf() utk input. #include #define MAXLEN 100 int main() { FILE *inputfile = NULL; char name[MAXLEN]; int count; Recall: definisi Macro

16 16 File I/O (Input) Step 4a: Use fscanf() for input. /* Asumsikan"names.lst" berisi daftar nama, buka file utk di baca.*/ inputfile = fopen("names.lst", "r"); if (inputfile == NULL) { printf("Error membuka file\n"); return 1; } listnames.c

17 17 File I/O (Input) Step 4a: Use fscanf() for input. /* Baca tiap nama dan hitung berapa banyak nama dalam file.*/ count = 0; while ( fscanf(inputfile, "%s", name) == 1 ) { count++; printf("%d. %s\n", count, name); } printf("\nJumlah nama yg di baca: %d\n", count); return 0; } listnames.c

18 18 File I/O (Input) Step 4a: Pakai fscanf() utk input. /* Baca tiap nama dan hitung berapa banyak nama dalam file.*/ count = 0; while ( fscanf(inputfile, "%s", name) == 1 ) { count++; printf("%d. %s\n", count, name); } printf("\nJumlah nama yg di baca: %d\n", count); return 0; } listnames.c Perlu file handler (“stream”), Bukan nama file.

19 19 File I/O (Input) Step 4a: Use fscanf() for input. /* Baca tiap nama dan hitung berapa banyak nama dalam file.*/ count = 0; while ( fscanf(inputfile, "%s", name) == 1 ) { count++; printf("%d. %s\n", count, name); } printf("\nJumlah nama yg di baca: %d\n", count); return 0; } Parameter lainya: Spt scanf() biasa. listnames.c

20 20 File I/O (Input) Step 4a: Use fscanf() for input. /* Baca tiap nama dan hitung berapa banyak nama dalam file.*/ count = 0; while ( fscanf(inputfile, "%s", name) == 1 ) { count++; printf("%d. %s\n", count, name); } printf("\nJumlah nama yg di baca: %d\n", count); return 0; } fscanf() mengembalikan jmlh input item yg di konver dan di- assign dg baik. listnames.c

21 21 /* Baca tiap nama dan hitung berapa banyak nama dalam file.*/ count = 0; while ( fscanf(inputfile, "%s", name) == 1 ) { count++; printf("%d. %s\n", count, name); } printf("\nJumlah nama yg di baca: %d\n", count); return 0; } File I/O (Input) Step 4a: Use fscanf() for input. Biasanya di cek jika muncul pembacaan atau assignment error, atau end of input file telah di capai. listnames.c

22 22 File I/O (Output) Step 4b: Pakai fprintf() utk output. #include #define MAXLEN 100 int main() { FILE *inputfile = NULL; FILE *outfile = NULL; char name[MAXLEN]; int count; float mark; /* Asumsikan"names.lst" berisi daftar nama, buka file utk di baca.*/ inputfile = fopen("names.lst", "r"); if (inputfile == NULL) { printf("Error membuka file\n"); return 1; } listnames2.c

23 23 File I/O (Output) Step 4b: Pakai fprintf() utk output. /* output file "names_marks.dat" berisi daftar nama dan tanda yang diberikan */ outfile = fopen("names_marks.dat", "w"); if (outfile == NULL) { printf("Error membuka output file\n"); return 1; } listnames2.c

24 24 File I/O (Output) Step 4b: Pakai fprintf() utk output. /* Baca tiap nama, berikan tanda, dan tulis name dan tandamark ke output file. Juga hitung ada berapa nama dalam file. */ count = 0; while ( fscanf(inputfile, "%s", name ) == 1 ) { count++; printf(“Masukan tanda untuk %s: ", name); scanf("%f", &mark); if ( fprintf(outfile, "%s %f\n", name, mark) <= 0 ) { printf("Error menulis output file\n"); return 1; } /*** etc ***/ listnames2.c

25 25 File I/O (Output) Step 4b: Pakai fprintf() utk output. /* Baca tiap nama, berikan tanda, dan tulis name dan tandamark ke output file. Juga hitung ada berapa nama dalam file. */ count = 0; while ( fscanf(inputfile, "%s", name ) == 1 ) { count++; printf("Masukan tanda untuk %s: ", name); scanf("%f", &mark); if ( fprintf(outfile, "%s %f\n", name, mark) <= 0 ) { printf("Error menulis output file\n"); return 1; } /*** etc ***/ File handler, Bukan nama file listnames2.c

26 26 File I/O (Output) Step 4b: Pakai fprintf() utk output. /* Baca tiap nama, berikan tanda, dan tulis name dan tandamark ke output file. Juga hitung ada berapa nama dalam file. */ count = 0; while ( fscanf(inputfile, "%s", name ) == 1 ) { count++; printf("Masukan tanda untuk %s: ", name); scanf("%f", &mark); if ( fprintf(outfile, "%s %f\n", name, mark) <= 0 ) { printf("Error menulis output file\n"); return 1; } /*** etc ***/ Parameter lainnya: spt printf(). listnames2.c

27 27 /* Baca tiap nama, berikan tanda, dan tulis name dan tandamark ke output file. Juga hitung ada berapa nama dalam file. */ count = 0; while ( fscanf(inputfile, "%s", name ) == 1 ) { count++; printf("Masukan tanda untuk %s: ", name); scanf("%f", &mark); if ( fprintf(outfile, "%s %f\n", name, mark) <= 0 ) { printf("Error menulis output file\n"); return 1; } /*** etc ***/ File I/O (Output) Step 4b: Pakai fprintf() utk output. fprintf() mengembalikan jmlh characters yg ditulis dg benar, atau negative jika muncul error. listnames2.c

28 28 File I/O (Close) Step 5: Close file dg fclose() int main() { /*** etc ***/ printf("\n"); printf("Jumlah nama yg di baca: %d\n", count); fclose(inputfile); fclose(outfile); return 0; }

29 29 File I/O (Close) Step 5: Close file dg fclose() int main() { /*** etc ***/ printf("\n"); printf("Jumlah nama yg di baca: %d\n", count); fclose(inputfile); fclose(outfile); return 0; } File handler, bukan tanam file.

30 30 File I/O (Close) Step 5: Close file dg fclose() int main() { /*** etc ***/ printf("\n"); printf("Jumlah nama yg di baca: %d\n", count); fclose(inputfile); fclose(outfile); return 0; } Bersihkan input buffer. hapus output buffer. fclose() gagal jika file tidak di buka dg baik.

31 31 Catatan pada Filename Jika path dtidak di berikan maka program hanya mencari pada direktory aktif. Path Directory nama file : DOS/Windows sysFile = fopen(“C:\\win\\system.ini”, “r”); Path Directory nama file : Unix/linux passFile = fopen(“/usr/etc/passwd”, “r”);

32 32 Catatan pada Filename Variable nama file: FILE *outFile = NULL; char someName[MAX_NAME_LEN]; printf(“Masukan output nama file: ”); scanf(“%s”, someName); outFile = fopen(someName, “w”);

33 33 File I/O dan Stream Recall: stream melayani sebagai channel utk mengirimkan karakter antara I/O devices dan program. Standard streams: stdin, stdout, stderr file handler/pointer melayani sbg stream ke/dari file. Sekali item di baca dari input stream, file position bergerak otomatis, dan item selanjutnya (jika ada) mjd item yang selanjutnya di baca ("sequential access").

34 34 Catatan pd Strings dan fscanf() Membaca dalam string: fscanf( stream, “%s”, string ) –Membaca hanya sebuah “kata" saat itu. –Kata di pisahkan oleh white-space: (space, tab, newline, atau kombinasinya) –Bergerak ke kata selanjutnya scr otomatis setelah pembacaan. scanf(“%s”, string ) –Sama, kecuali, input stream-nya adalah stdin.

35 35 Checking EOF count = 0; while ( fscanf(inputfile, "%s", name) != EOF ) { count++; printf("%d. %s\n", count, name); } Baik scanf() dan fscanf() mengembalikan: –Jmlh input item yg diconvert dan di-assign dg benar. –atau nilai konstant EOF saat muncul error atau end-of-file, but... Not recommended!

36 36 Checking EOF Dpt menyebabkan masalah jika conversion specifiers tidak sama dengan isi file Perhatian! Pakai EOF dengan hati-hati! while ( fscanf( inpf, "%s %f", name, &mark) != EOF ) { printf("%s\t %f\n", name, mark); } listmarks.c inpf: Jake absent Contoh:

37 37 Checking EOF Utk menge-check end-of-file (atau input error), check jmlh item/number of items yg di- convert dan di-assign dg baik apakah equal dg jmlh item yang dihrpkan/expected while ( fscanf( inpf, "%s %f", name, &mark) == 2 ) { printf("%s\t %f\n", name, mark); } listmarks.c

38 38 if ( scanf( "%d %d %d", &page, &row, &col) != 3 ) { printf( "I cannot go on without 3 integers :-( \n" ); exit(1); } Checking EOF Sama utk scanf(). testscanf1.c Utk menge-check end-of-file (atau input error), check jmlh item/number of items yg di- convert dan di-assign dg baik apakah equal dg jmlh item yang dihrpkan/expected

39 39 To check for end-of-file (or any other input error), check that the number of items converted and assigned successfully is equal to the expected number of items. if ( scanf( "%d %d %d", &page, &row, &col) != 3 ) { printf( "I cannot go on without 3 integers :-( \n" ); exit(1); } Checking EOF Fungsi exit() menyebabkan program berhenti segera. Perlu #include

40 40 Contoh: Hitung Kata WriTulis program utk menghitung kata dalam file.

41 41 Hitung Kata: Algorithm Duh? Tanya nama yg di cari user dlm buka file check jika file sukses di buka Hitung jmlh kata dlm file Cetak jumlahnya Tutup file

42 42 Hitung Kata: Algorithm set count to 0 loop { baca kata dari file jika saat membaca kata gagal maka { exit loop } tambahkan 1 ke count } Utk menghitung jmlh kata dalam file: Aku akan melakukannya dg sebuah fungsi

43 43 Function: countWords() Prototipe Function: int countWords ( FILE *inpf ); Deskripsi: –Fungsi ini mengembalikan jmlh kata dalam input stream inpf.

44 44 Function: countWords() PRE-Condition: –Diasumsikan bhw inpf adlh pointer ke file yg di buka dg baik. –Diasumsikan bhw posisi file berada pad awal input file/stream. –Bahwa “kata" berarti tiap string karakter, yg dipisahkan dg whitespace (space, tab, newline, atau kombinasinya). –Diasumsikan bhw tidak ada katadlm file yang panjangnya lebih dari (MAXLEN - 1) karakter.

45 45 PRE-Condition: –Diasumsikan bhw inpf adlh pointer ke file yg di buka dg baik. –Diasumsikan bhw posisi file berada pad awal input file/stream. –Bahwa “kata" berarti tiap string karakter, yg dipisahkan dg whitespace (space, tab, newline, atau kombinasinya). –Diasumsikan bhw tidak ada katadlm file yang panjangnya lebih dari (MAXLEN - 1) karakter. Function: countWords() We will use a #define to set the value of MAXLEN. (See countwords.h)

46 46 Function: countWords() POST-Conditions: –Pada akhir fungsi, posisi file berada pada end of file. –Fungsi mengembalikan nilai integer yaitu jumlah kata dalam file.

47 47 int countWords ( FILE *inpf ) { char word[MAXLEN]; int count = 0; while ( fscanf(inpf, "%s", word) == 1 ) { count++; } return count; } countwords.c Function: countWords()

48 48 Count Words: Algorithm Tanyakan user nama file yg akan di buka Buka file check jika file sudah terbuka sukses Hitung jumlah kata dalam file Cetak jumlahnya Tutup file Buat fungsi yg dapat di pakai lagi di sini

49 49 Function: openInput() Function prototype: FILE* openInput ( void ); Deskripsi: –Fungsi ini tetap menanyakan user mengenai nama file, hinga dapat di buka sebagai inputan.

50 50 Function: openInput() PRE-Condition: –Diasumsikan nama file cukup dalam ukuran string dari MAXLEN (termasuk '\0' ).

51 51 Function: openInput() POST-Conditions: –Program berhenti nila user memilih membatalkan operasi. –Kembalikan file handler/pointer utk file yang di tentukan. –Diasumsikan pemanggilan fungsi memiliki variabel yang berhubungan utk mendapatkan nilai yang dikembalikan. –Juga diasumsikan pemanggilan fungsi juga menangani penutupan file.

52 52 FILE* openInput ( void ) { FILE *handle = NULL; char theFile[MAXLEN]; int option; while (1) { printf("Enter file name: "); scanf("%s", theFile); if ( (handle = fopen(theFile, "r")) == NULL ) { /*Insert kode utk menangani error pembukaan file */ } else { break; } return handle; } countwords.c

53 53 printf("Error membuka file.\n"); option = 0; /*Set default utk membatalkan.*/ printf("\nKetik 1 utk mencoba lagi, "); printf(“atau angka lain utk membatalkan: "); scanf("%d", &option); printf("\n"); if ( option != 1 ) { printf(“Baik lalu. "); printf("Program Selesai.\n"); exit(1); } countwords.c Code utk menangani error pembukaan file:

54 54 Algorithm Utama set file utk menghasilkan openInput() set count utk menghasilkan countWords(file) Cetak jumlah count tutup file

55 55 #include #include "countwords.h" #include "countwords.c" int main() { FILE *inputFile = NULL; int count; inputFile = openInput(); count = countWords(inputFile); printf("\nAda %d kata dalam file.\n", count); fclose(inputFile); return 0; } Test Program #1 testcount1.c

56 56 Test Program #2 #include #include "countwords.h" #include "countwords.c" int main() { FILE *inputFile = NULL; int count; inputFile = openInput(); count = countWords(inputFile); printf("\nAda %d kata dalam file.\n", count); count = countWords(inputFile); printf("\nAda %d kata dalam file.\n", count); fclose(inputFile); return 0; } testcount2.c Apa hslnya jika panggil fungsi countWords() dua kali pd file yg sama?

57 57 Fungsi rewind() Kita dapat memakai fungsi rewind( stream ) utk me-re-set posisi file pada start/awal input file lagi. Catatan: –Pada setiap posisi filekita harus melakukan random access file I/O (tidak di bahas pad kuliah ini).

58 58 Test Program #3 #include #include "countwords.h" #include "countwords.c" int main() { FILE *inputFile = NULL; int count; inputFile = openInput(); count = countWords(inputFile); printf("\nAda %d kata dalam file\n", count); rewind(inputFile); count = countWords(inputFile); printf("\nAda %d kata dalam file\n", count); fclose(inputFile); return 0; } testcount3.c

59 59 Fungsi fgets() Utk Membaca baris dr text: fgets( string, size, stream ) –Membaca sebanyak ( size - 1 ) character dr stream dan menyimpannya ke dalam String. –Pembacaan berhenti setelah EOF atau baris baru/ newline. Jika newline/baris baru di baca, fungsi tsb menyimpannya kedalam string. –'\0' disimpan setelah karakter terakhir ke dalam string. –Mengembalikan NULL (double `L’!) jika error atau eof ketika tidak ada karakter yang di baca lagi

60 60 input: Hsiu Lin (Enter key) Hsiu Lin name \n\0 char name[10]; fgets(name, 10, stdin); Contoh: Dpt sbg file pointer (input stream). Fungsi fgets()

61 61 #include #define MAXLEN 256 int main() { int page, row, col; char dummy[MAXLEN]; printf("Masukan 3 angka integer "); while (scanf( "%d %d %d", &page, &row, &col) != 3 ) { printf( "Tidak berhenti sebelum ada 3 angka integer \n"); fgets(dummy, MAXLEN, stdin); } printf(“Bilangannya: %d %d %d\n", page, row, col); return 0; } Contoh: Validasi Input Dlm contoh ini, fgets() di pakai utk menghapus/"flush" input yang jelek dr buffer stdin testscanf2.c

62 62 Kesimpulan Sequential File handling EOF/Error Checking "C vocabulary“ baru: –FILE * –fopen(), fscanf(), fprint(), fclose() –exit() –rewind() –fgets()


Download ppt "1 File I/O. 2 Topik Penanganan file Sequential dlm C Dasar-dasar fungsi File I/O Contoh: Menghitung kata dalam file."

Presentasi serupa


Iklan oleh Google