Sabtu, 22 November 2014

FILE (BERKAS) Pada Pascal Jilid 2

5. Metode Pembacaan file oleh Turbo Pascal

q  Menggunakan statemen operasi READ / READLN
q  Bergantung pada tipe data variabel yang digunakannya :
¨   Variabel berjenis numerik (byte,integer, real)
Ø  Tanda batas akhir pembacaan variabel jika ditemui blank(spasi), EOL (end of line), EOF (End of File) atau TAB.
Ø  Jika sebelum membaca data (atau dengan kata lain tidak ada datanya) pointer pascal menemukan EOL / EOF, maka variabel tersebut akan diisi NOL.
Ø  Jika string yang dibaca oleh variabel numerik tidak sah, maka terjadi kesalahan I/O : Invalid numerik format.
¨   Variabel berjenis string
Karakter-karakter file aakan dibaca sampai ditemui EOL / EOF tercapai atau lebih besar dari ukuran stringnya.
¨   Variabel berjenis Char
Yang dibaca hanya satu karakter saja.
q  Agar pembacaan file sesuai dengan yang diharapkan, kadangkala perlu kita deklarasikan secara jelas jumlah byte yang disediakan untuk suatu variabel, atau mesti kita selipkan pencetakan spasi diantara dua variabel yang akan dibaca.
q  Perlu diperhatikan kesesuaian tipe data, antara yang dituliskan dengan metode WRITE/WRITELN dan dengan yang akan kita baca.

File Bertipe 
Karakteristik

·         Berisi data format biner, ukurannya lebih kecil dari file teks.
·         Tiap record memiliki tipe dan panjang yang sama. Bisa saja memiliki berbagai tipe asalkan dikelompokkan dalam RECORD.
·         Dapat diakses secara random, elemen-elemennya bisa dibaca secara acak yang keberapa saja.

Membuat file Bertipe
Urutan Prosesnya :

1.    Mendeklarasikan variabel file
Var NmVar:FILE OF TypeVariabel;
Dengan :
NmVar                  : Nama variabel file bertipe
TypeVariabel      : Char, variabel tipe RECORD, variabel tipe array, real, variabel
array tipe record. Untuk satu file satu tipe elemen.

Contoh :
Type DaftarBarang        = Array [1..100] of integer;
DataKonsumen     = RECORD
Nama          :string[15];
Alamat         :string[30];
Kode            :1..3;
DaftarKonsumen  = Array [1..100] of Datakonsumen ;
Var
FileBarang          : File of Daftarbarang;
FileJumlah          : File of  integer;
FileData   : File of DataKonsumen;
FileKode  : File of Char;

2.    Menghubungkan variabel file dengan nama file
Assign (NmVar, nama file);
Dengan :
NmVar                  : Nama variabel file bertipe
nama file             : Nama file dalam bentuk string, format 8:3 penamaan dos, ditulis
dalam bentuk string.

3.    Membuat /membuka file bertipe

Rewrite(NmVar);  => untuk membuat

Reset(NmVar);  => untuk membuka


4.    Menulis / membaca file Bertipe

 Write (NmVar, data item1, data item 2, …)  => untuk menulis

 Read (NmVar, data item1, data item 2, …)  => untuk membaca

Data item1, data item 2 dan seterusnya, harus berupa variabel, tidak bisa dituliskan secara langsung dalam bentuk konstanta. Variabelnya harus sama dengan deklarasi tipe file-nya.
Fungsi Writeln dan Readln tidak dapat digunakan pada file bertipe.

5.    Menutup file
Close (NmVar);

 Fungsi-fungsi yang digunakan dalam file Bertipe
 Seek (VarFile,N);
Menempatkan pointer ke posisi record ke-N
Contoh :
Seek(namafile,4); {pointer akan  menunjuk posisi record ke-4, dengan nomor record 3}

FilePOS (VarFile);
Untuk menunjuk nomor record (nomor record dimulai dari record 0)
Contoh :
Posisi:=Filepos(Varfile);     {mengetahui posisi pointer aktual di record mana, dan
hasilnya diletakkan pada variabel posisi}.

Filesize(VarFile);
Mengukur besar file bertipe, yaitu mengetahui jumlah record yang berada dalam suatu file (jika file baru dibuat = 0)
Contoh :
..
Begin
Write(‘input nomor record yang ingin dilihat’);readln(NoRec);dec(NoRec)
If NoRec >=filesize(VarFile) then
Writeln(‘Nomor record terlalu besar’);
Else
begin
seek(VarFile,NoRec);  {Pointer menuju nomor record yang dimaksud}
Read(VarFile,data);
End;
..
end.

EOF(VarFile);
Untuk menunjuk akhir dari file.
Truncate(VarFile);
Untuk menghapus sebagian file
Contoh :
Seek(varfile,5);      {pointer menuju record nomor 5}
Truncate(VarFile);             {menghapus mulai record nomor 5 sampai habis }


Contoh Program File Bertipe :

Program menambah_dan_membuat_file_bertipe
Uses crt;
Type mhs = Record
NPM : string[8];
Nama: string[25];
Alamat : string[20];
End;
Var vfilemhs  : FILE of mhs;
Recmhs   : mhs;
I                 : integer;
Oke           : char;
Begin
Clrscr;
Assign (vfilemhs,’Dataku.dat’);
{$I-}reset(vfilemhs);{$I+}
if IOResult <>0 then rewrite(vfilemhs);
I:=filesize(vfilemhs);
With recmhs do
Begin
Write(‘NPM :’);readln(NPM);
While NPM <>’ ‘ do
begin
Write(‘Nama :’);readln(Nama);
Write(‘Alamat :’);readln(Alamat);
repeat
Write(‘Save file…(Y/N)?’);readln(oke);
Until oke in [‘Y’,’y’,’n’,’N’];
If oke in [‘Y’,’y’] then
Begin
Seek(vfilemhs,I);
Write(vfilemhs,recmhs);
I:=I+1;
End;
Writeln;
Write(‘NPM:’);readln(NPM);
End;
End;
Close(vfilemhs);

End.

Program_Melihat_file_bertipe
Uses crt;
Type mhs = Record
NPM : string[8];
Nama: string[25];
Alamat : string[20];
End;

Var vfilemhs: FILE of mhs;
Recmhs:mhs;
I: integer;

Begin
Clrscr;
Assign(vfilemhs,’dataku.dat’);
Reset(vfilemhs);
Writeln(‘----------------------------------------------------------------------‘);
Writeln(‘No.          NPM              Nama             Alamat                     ‘);
Writeln(‘----------------------------------------------------------------------‘);

With recmhs
Begin
For I:=1 to filesize(vfilemhs) do
Begin
Seek(vfilemhs),I-1);
Read(vfilemhs),recmhs);
Writeln(I:2,’ ‘,NPM:8,Nama:25,Alamat:20);
End;
End;
Close(vfilemhs);
End.

File Tidak Bertipe

Karakteristik

·         File yang mengakses langsung ke media penyimpanan tanpa adanya pengenalan record dan sebagainya.
·         Digunakan untuk tugas-tugas yang berhubungan dengan file biner yang dapat diproses tanpa mengenal jenis recordnya.

 Membuat file Tidak Bertipe
 Urutan Prosesnya :
1.    Mendeklarasikan variabel file
Var NmVar:FILE;
2.    Menghubungkan variabel file dengan nama file
Assign (NmVar, nama file);
Dengan :
NmVar                  : Nama variabel file bertipe
nama file             : Nama file dalam bentuk string, format 8:3 penamaan dos, ditulis
dalam bentuk string.

3.    Membuka file bertipe

Rewrite(NmVar[,brec]);  => untuk membuat

Reset(NmVar[,brec]);    => untuk membuka
Dengan :
Brec          : Menunjukkan besar file dalam byte, opsional, boleh ditulis, boleh tidak,
dan besarnya kita tentukan sendiri. Defaultnya 128 Byte.  
4.    Menulis / membaca file tidak Bertipe

 Blockwrite (NmVar, Buffer, jumlah[,jumtulis])  => untuk menulis
Dengan :
Buffer       : daerah penyimpanan data yang akan ditulis ke dalam file. Buffer dapat
berupa suatu variabel dengan tipe apa saja sesuai dengan ukuran data yang akan ditulis di file.
Jumlah     : jumlah data yang akan ditulis ke file dalam ukuran byte.
Jumtulis   : suatu parameter yang tidak tetap yang boleh digunakan dan boleh juga
tidak digunakan, bila digunakan akan berisi jumlah byte yang dapat ditulis ke file.


 Read (NmVar, data item1, data item 2, …)  => untuk membaca
Dengan :
Buffer       : daerah penyimpanan yang tipe variabelnya disesuaikan dengan jumlah
data yang dibaca.
Jumlah     : jumlah byte yang akan dibaca dari file, dapat merupakan suatu variabel
dengan tipe word. Jumlah harus sama dengan besar buffer yang diberikan dan tidak boleh lebih dari 64 Kilobyte.
Jumbaca  : merupakan variabel yang berisi laporan jumlah byte yang dapat dibaca
dari file.

Contoh File tidak bertipe ::
 Program menyalin_file
Uses crt;
Var
Fileasal, filetuju  :file;
Besar                    :real;
Buf                        :array [1..10240] of char;
Hbaca, Hatulis    :word;
nfile1,nfile2         :string;

Begin
besar:=0;
clrscr;
write (‘Input nama file asal     :’);readln(nfile1);
write (‘Input nama file tujuan :’);readln(nfile2);
{$I-}
Assign(fileasal,nfile1);
Assign(filetuju,nfile2);
Reset(fileasal,1);
If IOResult <>0 then
Begin
Writeln(‘File asal tidak ada !’);
Halt(0);
End;
Rewrite(filetuju,1);
If IOResult <>0 then
Begin
Writeln(‘File tujuan tidak bisa dibuat !’);
Halt(0);
End;
{$I+}
 Repeat
Blockread(fileasal,buf,10240,hbaca);
Besar:=besar + hbaca;
Blockwrite(filetuju,buf,hbaca,htulis);
If hbaca <> htulis then
Begin
Writeln(‘Tujuan tidak bisa menampung besar file’);
Halt(0);
End;
Until hbaca <>10240;
Close (fileasal);
Close (filetuju);
Writeln (‘Besar file yang dipindahkan :‘,besar:10:0);
End.

 Menangani Kesalahan I/O pada File

Beberapa operasi pada file yang dapat mengalami kesalahan I/O :
Reset, rewrite, read, readln, write, writeln, close, append, seek

Agar program tidak berhenti, maka harus digunakan Compiler Directive Fungsi I/O result
Untuk pengecekan I/O file tersebut.

Bentuk Umum :
{$ Kode Kondisi}
Dengan :
·         Kode                        : Karakter kode, untuk fungsi I/O result adalah I.
·         Kondisi                   : OFF (-) / ON (+)
·         Secara default {$I+} => ON
·         I/O Result  => bernilai 0 jika operasi berhasil
·         Isi nilai selalu dihapus sendiri setiap kali dipanggil
·         Penulisannya mengapit operasi-operasi yang rentan kesalahan

Contoh :

Assign(VarFile, ‘data.dat’);
{$I-}
Reset(VarFile);
{$I+}
fileada := IOResult = 0;
if fileada then
begin
writeln(‘file sudah ada…’);
end
else                                                     { Kondisi bila file tidak ada }
begin
rewrite(VarFile);                           { Buat file baru }      
write (VarFile, var1, var2, …);
close(VarFile);
end;


Referensi :
1. Anonim, “Algoritma & Pemrograman II”, Penerbit Gunadarma, Jakarta, 1990
2. Bryon, Goffried, “Programming with PASCAL”, Schaum Series, New York, 1986
3.  Prather, Ronald E., “Problem Solving Principle : Programming with Pascal”, Prentice Hall, New Jersey, 1982
4. Dumairy, Matematika Terapan untuk Bisnis & Ekonomi Press (BPFE Yogyakarta)
5. Yogianto H.M, Turbo Pascal 5.0 Penerbit Andi Offset, Yogyakarta.
6. Ediman Lukito, Belajar Sendiri Pemrograman dengan Turbo Pascal 7.0
7. Ir. P. Insap Santosa, Turbo Pascal versi 5.0 dan 5.5, Elexmedia Komputindo

Tidak ada komentar:

Posting Komentar