Sabtu, 19 Maret 2011

Tipe Data File

Pendahuluan
Seringkali pada program-program aplikasi untuk sistem informasi, data perlu disimpan untuk keperluan penegelolaan lebih lanjut. Bila data yang perlu disimpan mempunyai volume yang cukup besar, maka penggunaan variabel, larik, atau pointer sudah tidak tepat lagi, karena variabel, larik, atau pointer menggunakan memori internal komputer, sehingga tidak cukup untuk menampungnya. Variabel, larik, dan pointer hanya tepat digunakan untuk menyimpan data yang sedang digunakan untuk proses saja.
Untuk menyimpan data dengan volume yang besar harus digunakan cara yang lain, yaitu dapat dengan menyimpannya di external memory yang relatif mempunyai kapasitas penyimpanan lebih besar daripada internal memory serta involatile (tidak hilang bila aliran listrik terputus, sehingga dapat menyimpan data lebih permanen).
Data yang ada di external memory disimpan dalam bentuk file. File ini dapat diibaratkan dengan map-map yang berisi dengan data di filling cabinet dan filling cabinet itu sendiri dapat diibaratkan sebagai simpanan luarnya. Seperti halnya filling cabinet yang dapat menyimpan beberapa map, demikian juga dengan disk dapat menyimpan beberapa file.
Suatu file terdiri dari urutan komponen yang mempunyai tipe yang sama. Berbeda dengan larik yang jumlah komponennya sudah pasti, jumlah komponen dalam file sifatnya luwes, yaitu dapat ditambah dan dikurangi sewaktu-waktu.
Di dalam bahasa Pascal dikenal 3 macam tipe file, yaitu file teks (text file), file bertipe (typed file), dan file tak bertipe (untyped file).

Procedure dan Function Standard Untuk Semua Tipe File

Assign (f:file;name:string)     : digunakan untuk menghubungkan nama dari external    file ke suatu variabel file.
Rewrite (f[:file; recsize:word]): digunakan untuk membuka file yang baru atau yang belum pernah ada di disk.
Reset (f[:file; recsize:word])  : digunakan untuk membuka file yang sudah ada.
Close (f:file)                        : digunakan untuk menutup file yang telah dibuka dengan procedure standard Rewrite, Reset, atau Append (procedure khusus untuk membuka file teks).
Erase (f:file)                        : digunakan untuk menghapus suatu external file. Dalam penggunaanya harus didahului dengan procedure standard Close.
Rename (f:file;newname:string): digunakan untuk mengganti nama suatu external file.
GetDir (d:byte; var s:string)   : digunakan untuk mengetahui direktori yang aktif pada suatu drive.
ChDir (s:string)                    : digunakan untuk mengubah posisi dari direktori.
MkDir (s:string)                    : digunakan untuk membuat suatu direktori.
RmDir (s:string)                   : digunakan untuk menghapus suatu direktori.
Eof (f:file):boolean               : fungsi ini akan menghasilkan status apakah file sudah berada di posisi akhir dari file atau tidak.

File Teks

File tekas merupakan file yang berisi karakter yang dibentuk dalam baris-baris dan masing-masing baris dengan end-of-line marker berupa karakter carriage return dan karakter line feed (CR/LF). Sedangkan akhir dari file ditunjukkan dengan karakter Ctrl-Z.
Panjang dari tiap-tiap baris dari file teks dapat berbeda-beda, sehingga posisi dari suatu baris tertentu dari file teks tidak dapat dihutung dan akibatnya file tekas hanya dapat diakses secara urut.
File teks sebenarnya merupakan file dengan tipe Char, tetapi mempunyai perbedaan, yaitu nilai yang bukan tipe Char dapat direkam dan dibaca oleh file teks. Nilai yang bukan tipe Char ini akan secara otomatis dirubah ke atau dari tipe Char.

Deklarasi
var
          variabelFile : Text;
begin
end.

Prosedur dan Fungsi Standard File Teks
Append(var f:text);                      : digunakan untuk membuka file yang telah ada untuk keperluan menambah data ke dalam file.
Write([var f:text;] v1 [v2,…,vn])    : digunakan untuk merekam data ke dalam file.
Writeln([var f:text;] v1 [v2,…,vn])  : digunakan untuk merekam data ke dalam file dan memberikan end-of-line marker.
Flush(var f:text)                          : digunakan untuk segera merekam data yang ada di dalam buffer ke dalam file teks.
Read([var f:text;] v1 [v2,…,vn])    : digunakan untuk membaca satu atau lebih nilai dari file ke dalam satu variabel atau lebih.
Readln([var f:text;] v1 [v2,…,vn])  : kegunaannya sana dengan procedure Read, tetapi procedure ini akan menggeser pembacaan ke awal baris beikutnya dalam file.
Eoln[(var f:text)]:boolean             : digunakan untuk mengetahui apakah posisi dari file berada di end-of-line marker atau tidak.
SeekEof[(var f:text)]:boolean        : kegunaannya sama dengan Eof, yaitu menghasilkan status akhir dari file.
SeekEoln[(var f:text)]:boolean       : kegunaannya sama dengan Eoln, yaitu menghasilkan status akhir dari baris.

Contoh program:
Membuat file teks baru
uses Crt;
var
  berkasText  : Text;
  kodeBrg     : String[5];
  namaBrg     : String[20];
  unitBrg     : Integer;
  hargaBrg    : Real;
  lagi        : Char;

begin
  {hubungkan dengan external file}
  Assign(berkasText,'Barang.txt');

  {buka file}
  Rewrite(berkasText);

  Lagi:='Y';
  while upCase(Lagi)='Y' do
  begin
    clrScr;
    gotoxy(5,6) ;Write('Kode Barang         : ');
    gotoxy(5,8) ;Write('Nama Barang         : ');
    gotoxy(5,10);Write('Unit Barang         : ');
    gotoxy(5,12);Write('Harga Satuan Barang : ');

    gotoxy(27,6) ;readln(kodeBrg);
    gotoxy(27,8) ;readln(namaBrg);
    gotoxy(27,10);readln(unitBrg);
    gotoxy(27,12);readln(hargaBrg);

    {rekam di file}
Writeln(berkasText,kodeBrg:5,namaBrg:20,unitBrg,hargaBrg:10:2);

    gotoxy(5,15);write('Ada data lagi (Y/T)? ');readln(lagi);
  end;

  {tutup file}
  close(berkasText);
end.

Menampilkan semua isi file

uses Crt;
var
  berkasText  : Text;
  kodeBrg     : String[5];
  namaBrg     : String[20];
  unitBrg     : Integer;
  hargaBrg    : Real;

begin
  {hubungkan dengan external file}
  Assign(berkasText,'Barang.txt');

  {buka file}
  Reset(berkasText);

  clrScr;
  While not(Eof(berkasText)) do
  begin
    Readln(berkasText,kodeBrg,namaBrg,unitBrg,hargaBrg);
    Writeln(kodeBrg,namaBrg:22,unitBrg:7,hargaBrg:10:2);
  end;

  {tutup file}
  close(berkasFile);
end.


File Bertipe
Berbeda dengan file teks yang hanya dapat diakses secara urut, file bertipe (typed file) disamping dapat juga diakses secara urut (sequential access), dapat juga dikases secara acak (random access). Ini berarti komponen-komponen di dalam file bertipe dapat dibaca atau direkam dari manapun di dalam file.
Dalam file bertipe, kita dapat menambahkan variabel terdefinisi dalam unit standard System untuk menentukan kode akses file bertipe. Adapun kode aksesnya adalah:
0 – read only
1 – write only
2 – read/write (default)

Deklarasi
var
          fileData : File of tipeData;
begin
end.

tipeData dapat berupa integer, real, char, string, array, record, dan sebagainya.

Prosedur dan Fungsi Standard File Bertipe
Write (f,v1[v2,…,vn])                   : digunakan untuk merekam satu atau lebih nilai ke dalam file.
Read (f,v1[v2,…,v3])                    : digunakan untuk membaca satu atau lebih nilai dari file.
Seek (f; n : longint)                     : digunakan untuk mengarhkan penunjuk file ke suatu komponen tertentu, sehingga memungkinkan kita untuk membaca komponen atau menuliskan komponen secara acak.
Truncate(f)                                 : digunakan untuk menghapus sejumlah komponen atau record mulai dari posisi record tertentu.
FilePos(f):longint                          : digunakan untuk menghasilkan letak posisi sekarang dari penunjuk file.
FileSize(f):longint                         : digunakan untuk menghasilkan jumlah dari komponen atau record yang sudah ada di file. Fungsi ini harus digunakan setelah file dibuka.

Contoh Program:
Membuat file bertipe (typed file) baru
uses crt;
type
  mahasiswa = record
    nomor : integer;
    nama  : string[25];
    nilai : real;
  end;

var
  fileMhs : File of mahasiswa;
  recordMhs : mahasiswa;
  lagi : char;
begin
  assign(fileMhs,'MHS.dat');
  rewrite(fileMhs);

  lagi:='Y';
  while upcase(lagi)='Y' do
  begin
    clrscr;
    with recordMhs do
      gotoxy(5,6) ;write('Nomor Mahasiswa    : ');
      gotoxy(5,8) ;write('Nama Mahasiswa     : ');
      gotoxy(5,10);write('Nilai Mahasiswa    : ');

      gotoxy(27,6) ;read(nomor);
      gotoxy(27,8) ;read(nama);
      gotoxy(27,10);read(nilai);
    end;

    write(fileMhs,recordMhs);

    gotoxy(5,15);write('Memasukkan data lagi (Y/T)? ');
    readln(lagi);
  end;

  close(fileMhs);
end.

Menampilkan semua data di file bertipe

uses crt;
type
  mahasiswa = record
    nomor : integer;
    nama  : string[25];
    nilai : real;
  end;

var
  fileMhs : File of mahasiswa;
  recordMhs : mahasiswa;

begin
  assign(fileMhs,'MHS.dat');
  rewrite(fileMhs);

  while not(Eof(fileMhs)) do
  begin
    read(fileMhs,recordMhs);
    with recordMhs do
      write(nomor:5,nama:17,nilai:10:2);
  end;

  close(fileMhs);
end.


File Tak Bertipe
File tak bertipe (untyped file) adalah channel I/O (Input/Output) level rendah (low level I/O channel) yang digunakan untuk mengakses langsung suatu file di disk tidak peduli bagaimana tipe dan strukturnya.

Deklarasi
          FileData : File;

Karena file tak bertipe tidak memandang tipe dan struktur filenya, maka file tak bertipe ini sifatnya kompatibel dengan file apapun dan tepat digunakan untuk operasi-operasi mengecek keberadaan suatu file di dalam disk, menghapus suatu file, mengganti nama dari suatu file, menyalin suatu file, dan operasi-operasi lainnya yang tidak langsung melibatkan operasi I/O.
Prosedur dan fungsi standard yang dapat digunakan di file bertipe dapat juga digunakan di file tak bertipe, kecuali prosedur standard Read dan Write yang diganti dengan prosedur standard BlockRead dan BlockWrite. Kedua prosedur ini digunakan untuk transfer data dengan kecepatan tinggi.
BlockRead(var f:file;var buf;countword[;result:word]);
BlockWrite(var f:file;var buf;countword[;result:word]);

Contoh Program
Mengganti nama file di disk
var
  fileGantiNama : file;
  fileLama, fileBaru : string[139];

begin
  write('Nama file yang akan diganti? ');readln(fileLama);
  write('Nama file baru             ? ');readln(fileBaru);

  if (fileLama = '') or (fileBaru = '') then halt;

  Assign(fileGantiNama,fileLama);
  {$I-} Rename(fileGantiNama,fileBaru);
  {$I+};

  if IOResult <> 0 then
    writeln('Salah, file TIDAK DITEMUKAN atau nama baru TELAH ADA')
  else
    writeln('file telah diganti namanya');
end.

0 komentar:

Posting Komentar