pertemuan vii file teks & file...

Post on 30-Apr-2019

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

PERTEMUAN VII

FILE TEKS & FILE BINER

7.1 Tujuan Praktikum

Praktikan dapat membedakan antara file teks dan file biner serta dapat

mendeklarasikan, membuat, membaca dengan menggunakan dua buah macam file

tersebut serta mampu menerapkannya didalam sebuah program sederhana.

7.2 Materi Praktikum

Pada bahasa C terdapat dua jenis file yaitu file berpenyangga (buffered

files) dan file tidak berpenyangga (unbuffered files). Perbedaan diantara keduanya

ialah penggunaan suatu penyangga (buffer) untuk menampung sementara informasi

yang akan dipindahkan dari memori internal komputer ke atau dari file pada file

berpenyangga sedangkan pada file tidak berpenyangga tidak menggunakannya. File

tidak berpenyangga termasuk kedalam operasi input/output level rendah.

Karena penggunaannya yang tidak banyak dipakai terutama dalam

lingkungan ASCI teks, maka pembahasan akan lebih difokuskan pada penggunaan

file berpenyangga di dalam sebuah program. File berpenyangga ini sendiri

sebenarnya terdiri dari dua, yaitu file teks dan file biner.

Baik itu file teks atau file biner, keduanya harus di deklarasikan dan

mempunyai cara pendeklarasian yang sama. Pendeklarasikan sebuag file

memerlukan sebuah pointer file yang menunjuk kepada suatu penyangga.

Penyangga yang dimaksud di sini berupa statement FILE. FILE ini sebenarnya

merupakan suatu struct dari buffer yang digunakan pada file berpenyangga. FILE

ini terdapat pada header file stdio.h. Berikut ini merupakan contoh pendeklarasian

sebuah file dengan menggunakan penyangga :

FILE *pf;

Nantinya variabel pointer tersebut dapat digunakan pada operasi file selanjutnya,

seperti operasi membuka file, membuat file, membaca file dan menutup file. Perlu

di ingat bahwa satu buah file pointer hanya dapat digunakan untuk sebuah file baik

itu file teks ataupun file biner. Jika ingin membuat lebih dari satu buah file, maka

diperlukan lebih dari satu buah variabel pointer file.

Membuka File

Suatu file di disk harus dibuka sebelum digunakan. Hal ini dapat dilakukan

dengan menggunakan fungsi standar fopen(). Hasil dari pembukaan file ini akan

didapatkan suatu nilai pointer dengan tipe FILE. Prototype dari fungsi fopen()

berada di header file stdio.h. Berikut ini bentuk umum dari fungsi fopen() :

FILE *fopen(const char *nama-file, const char *mode)

Hasil dari fungsi ini adalah suatu nilai pointer dan jika fungsi ini tidak berhasil

akan menghasilkan nilai NULL. Nama-file merupakan nama yang ditentukan

sendiri oleh pembuat program yang ditulis dalam bentuk string. Mode dari file juga

merupakan suatu nilai string yang ditulis diantara tanda petik dua. Mode dari file

menunjukkan status dari file yang akan dibuka. Mode-mode file dapat di lihat dari

tabel berikut ini :

Mode Arti

“r”

Membuka file yang telah ada untuk dibaca. Jika file belum

ada, pembukaan file tidak akan berhasil dan fungsi fopen()

akan menghasilkan nilai NULL.

“w” Membuat file baru untuk ditulisi. Jika file telah ada, maka

isi file lama akan dihapus.

“a”

Membuka file yang telah ada untuk di tambahkan dengan

data. Data baru akan di letakkan di akhir file (append). Jika

file belum ada, maka akan di buat file yang baru.

“r+” Sama dengan “r” tetapi selain file dapat di baca juga dapat

di tulisi.

“w+” Sama dengan “w” tetapi selain file dapat di tulisi juga dapat

di baca.

“a+” Sama dengan “a” tetapi selain file dapat di tulisi juga dapat

di baca.

File dapat di buka sebagai file teks (text file) atau file biner (binary file).

Ada perbedaan pokok diantara keduanya. Untuk file teks, karakter ganti baris (‘\n’)

akan direkankan ke disk berupa CR (carriage return) dan LF (line feed).

Sebaliknya informasi di disk berupa CR dan LF akan diartikan sebagai ’\n’

sewaktu dibaca. Untuk file binar, karakter ‘\n’ akan direkamkan ke disk sebagai LF

saja (sebaliknya LF dari disk akan di artikan sebagai ‘\n’ di buffer) dan karakter ‘\r’

di buffer akan di rekamkan sebagai CR di disk (sebaliknya nilai CR di disk akan

dibaca sebagai karakter ‘\r’ untuk buffer). Dengan demikian untuk membentuk CR

dan LF di dalam file biner kita membutuhkan karakter ‘\r’ dan ‘\n’. perbedaan lain

antara file biner dengan file teks adalah pada file teks nilai ascii 26 (CTRL-Z) akan

dianggap sebagai akhir dari file, sedangkan pada file biner, nilai ascii 26 dianggap

sebagai data, bukan akhir dari file.

Dari keenam mode diatas, semuanya secara default ditujukan untuk

pembuatan file teks. Untuk merubah dari modus teks ke modus biner dapat

digunakan huruf “t” untuk file teks dan huruf “b” untuk file biner. Dengan

demikian dari mode file sebelumnya dapat dikombinasikan dengan huruf “t” dan

“b”, menjadi “rt”, “wt”, “at”, ”r+t”, “w+t”, dan “a+t” untuk file teks dan “rb”,

“wb”, “ab”, ”r+b”, “w+b”, dan “a+b” untuk file biner.

Dalam menggunakan fungsi ini, yang perlu kita perhatikan ialah berapa

banyak file yang akan kita buka. MS-DOS telah menetapkan standar bahwa jumlah

maksimum file dapat dibuka pada saat yang bersamaan (jika belum di rubah file

configurasinya pada file CONFIG.SYS) adalah 20 buah. Setiap kali kita

memanggil file stdio.h, kita sesungguhnya telah membuka lima file standar dari

Turbo C yaitu stdin, stdout, stdprn, stderr dan stdaux. Oleh karena itu dalam

pembuatan program nanti, maksimum jumlah file yang dapat kita buat / buka pada

saat bersamaan adalah 20 – 5 yaitu hanya 15 buah saja, kecuali anda memodifikasi

file config.sys pada script FILES = ….

Berikut ini merupakan penggalan program yang digunakan untuk membuka file

dan jika file yang akan dibuat gagal dibuka.

…………….

FILE *pf; // mendeklarasikan variabel pointer file pf

if (pf = fopen(“coba.txt”, “w”)) == NULL)

{

cout << “File tidak dapat dibuka…!”;

exit(1);

}

else

{ ……………………………. }

Menutup File

Menutup file umumnya dilakukan untuk tiga tujuan. Yang pertama yaitu

untuk menutup semua file yang masih terbuka sebelum program dihentikan. Yang

kedua adalah menutup file tertentu karena sudah tidak digunakan lagi di dalam

program dan yang ketiga menutup file karena ingin membuka file yang baru.

Dengan menutup file, maka informasi yang ada di buffer akan direkamkan

terlebih dahulu ke file. Fungsi yang biasanya digunakan untuk melakukan operasi

ini ialah fclose() dan fcloseall(). Kedua fungsi ini berada pada header file stdio.h.

bentuk umum dari fungsi fclose() adalah sebagai berikut :

int fclose(FILE *pointer-file);

Hasil dari fungsi diatas ialah nilai integer 0 jika berhasil dan nilai integer –1 / EOF

jika proses penutupan file tidak berhasil dilakukan. Sedangkan bentuk umum dari

fcloseall() adalah sebagai berikut :

Int fcloseall(void);

Hasil dari fungsi diatas ialah nilai jumlah file yang berhasil ditutup atau nilai

integer –1 / EOF jika proses penutupan file tidak berhasil dilakukan.

Berikut ini merupakan penggalan program yang digunakan untuk

membuka file dan jika file yang akan dibuat gagal dibuka.

…………….

if (fclose(pf) == EOF)

{

cout << “Ada kesalahan menutup file…!”;

exit(1);

}

Meletakkan Data ke Buffer

Bahasa C membedakan lima macam bentuk data yang akan diletakkan

pada buffer, yaitu : karakter, integer, string, terformat dan blok data. Untuk masing-

masing bentuk datanya, fungsi-fungsi standar yang digunakan nya ialah untuk

menulis ke file dan membaca dari file seperti terlampir dibawah ini :

Meletakkan sebuah karakter ke buffer

Untuk meletakkan sebuah karakter ke buffer sebagai artian untuk

merekamkan / menyimpan string ke dalam file digunakan fungsi standar fputc()

dengan bentuk umumnya adalah sebagai berikut :

int fputc(int c, FILE *pointer-file)

hasil dari prosedur ini akan menyimpan nilai c berupa kode karakter ascii kedalam

sebuah file yang ditunjuk oleh pointer file.

Setelah file dibuka, informasi didalam file dapat dilihat dengan

menggunakan fungsi standar fgetc() dengan bentuk umumnya adalah sebagai

berikut :

int fgetc(FILE *pointer-file)

hasil dari prosedur ini akan mengembalikan nilai berupa kode karakter ascii dari

dalam file yang ditunjuk oleh pointer file.

Untuk penggunaan pemasukkan karakter ke dalam file, sebaiknya

menggunakan modus file teks bukannya file biner, ini dimasukkan agar kode ascii

yang dimasukkan benar-benar dianggap sebagai terjemahan dari charakter yang

kita maksudkan bukannya bilangan biner, tapi ini tidak berarti bahwa pemasukkan

karakter tidak dapat dilakukan pada file biner.

Untuk memahami penggunaan fungsi-fungsi diatas perhatikan contoh pada

penggalan program berikut ini :

{ Untuk menyimpan karakter ke file }

while(( C = getche()) != ‘r’) // lakukan penginputan sampai tekan enter

fputc(C,pf); // lakukan perekaman ke disk

fclose(pf); // tutup file

{ Untuk membaca karakter dari file }

while(( C = fgetc(pf)) != EOF) // lakukan penginputan sampai tekan enter

putchar(C); // lakukan perekaman ke disk

fclose(pf); // tutup file

Meletakkan sebuah Integer ke buffer

Untuk meletakkan sebuah nilai integer ke buffer untuk direkamkan /

disimpan ke dalam file digunakan fungsi standar putw() dengan bentuk umumnya

adalah sebagai berikut :

int putw(int w, FILE *pointer-file)

hasil dari prosedur ini akan menyimpan nilai w berupa nilai integer kedalam

sebuah file yang ditunjuk oleh pointer file, & nilai integer –1 jika terjadi kegagalan

penyimpanan.

Untuk membaca nilai-nilai integer dari file dapat digunakan fungsi standar

getw() dengan bentuk umumnya adalah sebagai berikut :

int getw(FILE *pointer-file)

hasil dari prosedur ini akan menghasilkan nilai integer yang terbaca dari dalam file

yang ditunjuk oleh pointer file.

Untuk penggunaan pemasukkan nilai integer ke dalam file, sebaiknya

menggunakan modus file biner bukannya file teks, ini dimasukkan agar nilai

integer tadi tidak dianggap sebagai kode ascii oleh file teks, sebagai contoh

bilangan 10 yang kita masukkan, akan dianggap sebagai LF pada file teks. Pada file

biner, karena tidak memiliki kode ascii 26 sebagai penanda akhir file, maka

digunakan fungsi feof() untuk mendeteksi keberadaan akhir dari sebuah file biner.

Untuk memahami penggunaan fungsi-fungsi diatas perhatikan contoh pada

penggalan program berikut ini :

{ Untuk menyimpan nilai integer ke file }

cout << “Banyaknya data ? “; // masukkan banyaknya data utk input

cin >> n;

for(i=1; i<=n; i++)

{

cout << “Data ke-“ << i;

cin >> x;

putw(x,pf); // lakukan perekaman ke disk

}

fclose(pf); // tutup file

{ Untuk membaca nilai integer dari file }

for( ; ; )

{

x = getw(pf); // ambil data dari file

if (feof(pf)) break; // jika akhir dari file maka keluar

cout << x << endl; // cetak data

}

fclose(pf); // tutup file

Meletakkan sebuah string ke buffer

Untuk meletakkan sebuah nilai string ke buffer untuk direkamkan /

disimpan ke dalam file digunakan fungsi standar fputs() dengan bentuk umumnya

adalah sebagai berikut :

int fputs(const char *s, FILE *pointer-file)

hasil dari prosedur ini akan menyimpan nilai s berupa untaian kode karakter ascii

kedalam sebuah file yang ditunjuk oleh pointer file.

Setelah file dibuka, informasi didalam file dapat dilihat dengan

menggunakan fungsi standar fgets() dengan bentuk umumnya adalah sebagai

berikut :

int fgets(char *s, int n, FILE *pointer-file)

hasil dari prosedur ini akan mengembalikan nilai string dari dalam file yang

ditunjuk oleh pointer file, jika gagal akan menghasilkan nilai NULL. Sedangkan

nilai n menunjukkn jumlah karakter yang dibaca.

Seperti halnya pada pemasukkan karakter kedalam file, pada pemasukkan

nilai string juga dapat dilakukan dengan menggunakan dua metode yaitu dengan

file teks dan file biner, tetapi modus file teks lebih disarankan. Pada pemasukkan

nilai string, akhir dari masukkan selalu merupakan nilai NULL (‘\0’) dan ini tidak

dituliskan kedalam file.

Untuk memahami penggunaan fungsi-fungsi diatas perhatikan contoh pada

penggalan program berikut ini :

{ Untuk menyimpan karakter ke file }

char teks[256];

cout << “Masukkan sebuah kalimat : “;

cin.get(teks, sizeof(teks)); // input data string

fputs(teks,pf) // rekamkan data string ke file

fclose(pf); // tutup file

{ Untuk membaca karakter dari file }

while(fgets(teks,256,pf)) // baca file per string sampai ditemui EOF

cout << teks << endl;

fclose(pf); // tutup file

Meletakkan sebuah data terformat ke buffer

Untuk meletakkan data terformat ke buffer untuk direkamkan ke file di

gunakan fungsi standar fprintf() dengan bentuk umumnya adalah sebagai berikut :

int fprintf(FILE *pointer-file, const char *format, argumen-argumen)

hasil dari prosedur ini akan menyimpan jumlah byte kedalam sebuah file yang

ditunjuk oleh pointer file, penggunaan formatnya sama dengan yang digunakan

pada printf(), bedanya printf() untuk mencetak kelayar kalau fprintf() untuk ke file.

Setelah file dibuka, informasi didalam file dapat dilihat dengan

menggunakan fungsi standar fscanf() dengan bentuk umumnya adalah sebagai

berikut :

int fscanf(FILE *pointer-file, const char *format, argumen-argumen)

hasil dari prosedur ini akan mengembalikan jumlah dari item yang berhasil dibaca

dari dalam file yang ditunjuk oleh pointer file.

Fungsi fprintf() akan meletakkan nilai di buffer dengan bentuk kode ascii,

bukan dalam bentuk biner murni. Misalnya nilai numerik 300 dengan format

“%9.2f” akan diletakkan di bufferdan direkamkan di file sebesar 9 byte bukannya 4

byte (untuk tipe float = 4byte). Oleh karena itu umumnya file untuk operasi ini

dibuka dengan menggunakan metode file teks.

Untuk memahami penggunaan fungsi-fungsi diatas perhatikan contoh pada

penggalan program berikut ini :

{ Untuk menyimpan data terformat ke file }

cout << “Banyaknya data ? “; // masukkan banyaknya data utk input

cin >> n;

for(i=1; i<=n; i++)

{

cout << “Data ke-“ << i;

cout << “Nama : “;

cin >> nama;

cout << “Nilai : “;

cin >> nilai;

fprintf(pf,”%s %3d\n”, nama, nilai); // lakukan perekaman ke disk

dengan format string dahulu utk

npm baru 3 digit desimal untuk

nilai

}

fclose(pf); // tutup file

{ Untuk membaca data terformat dari file }

while(fscanf(pf, ”%s %3d\n”, &nama, &nilai) != EOF)

{

i = i + 1;

cout << “Data ke-“ << i;

cout << “Nama : “ << nama;

cout << “Nilai : “ << nilai << endl;

}

fclose(pf); // tutup file

Meletakkan Blok Data ke buffer

Untuk meletakkan blok data ke buffer untuk direkamkan ke file di

gunakan fungsi standar fwrite() dengan bentuk umumnya adalah sebagai berikut :

size_t fprintf(const void *blok, size_t n, FILE *pointer-file)

hasil dari prosedur ini akan menyimpan jumlah dari item (bukan byte) kedalam

sebuah file yang ditunjuk oleh pointer file.

Setelah file dibuka, informasi didalam file dapat dilihat dengan

menggunakan fungsi standar fread() dengan bentuk umumnya adalah sebagai

berikut :

size_t fprintf(const void *blok, size_t n, FILE *pointer-file)

hasil dari prosedur ini akan mengembalikan jumlah item yang berhasil dibaca dari

dalam file yang ditunjuk oleh pointer file.

Maksud dari block data diatas ialah suatu data yang sudah digabung

menjadi satu melalui sebuah record. Disini, record diimplementasikan sebagai

sebuah stuct. Pada fungsi ini juga membutuhkan ukuran block data yang akan

disimpan kedalam file. Untuk mengetahui ukuran block data dapat digunakan

fungsi standat sizeof(). Biasanya untuk menggunakan operasi ini digunakan modus

file biner.

Untuk memahami penggunaan fungsi-fungsi diatas perhatikan contoh pada

penggalan program berikut ini :

{ Untuk menyimpan blok data ke file }

struct

{

char nama[20];

int nilai;

} data_mhs;

cout << “Banyaknya data ? “; // masukkan banyaknya data utk input

cin >> n;

for(i=1; i<=n; i++)

{

cout << “Data ke-“ << i;

cout << “Nama : “;

cin >> data_mhs.nama;

cout << “Nilai : “;

cin >> data_mhs.nilai;

fwrite(&data_mhs,sizeof(data_mhs), 1, pf);

(* lakukan perekaman ke disk *)

}

fclose(pf); // tutup file

{ Untuk membaca blok data dari file }

for( ; ; )

{

fread(&data_mhs, sizeof(data_mhs), 1 pf);

if(feof(pf)) break; // jika data habis, maka keluar

i = i + 1;

cout << “Data ke-“ << i;

cout << “Nama : “ << data_mhs.nama;

cout << “Nilai : “ << data_mhs.nilai << endl;

}

fclose(pf); // tutup file

7.3 Laporan Pendahuluan

1. Pengertian file berpenyangga dan file tidak berpenyangga.

2. Perbedaan file biner dengan file teks.

3. Operasi apa saja yang dapat dilakukan pada file.

4. Sebutkan fungsi-fungsi standar untuk operasi file beserta bentuk umumnya

7.4 Materi Praktikum

1. Memberikan penjelasan secara teoritis mengenai file

2. Terangkan perbedaan jika menggunakan jenis file biner dan jenis file teks.

3. Menerangkan tentang fungsi-fungsi standar yang digunakan untuk melakukan

operasi file.

4. Pemberian program-program file sederhana, jika waktu tidak memadai dapat

langsung memberikan contoh untuk file menyimpan blok data. Nilai K

(Keterampilan) didapat jika praktikan melengkapi program tentang file.

7.5 Laporan Akhir

Buat Algoritma dari program file yang sudah dibuat, dan kembangkan program file

teks dengan memberikan menu pada program yang isinya pilihan untuk membuka

file, membuat file dan membaca isi file.

top related