pertemuan vii file teks & file...
Post on 30-Apr-2019
218 Views
Preview:
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