File bertipe record memungkinkan akses secara acak pada komponen-komponen di dalamnya. File bertipe dapat dibuka dengan rewrite untuk membuat file baru atau reset untuk membuka file yang ada. File bertipe mendukung operasi baca dan tulis pada record-recordnya menggunakan prosedur read dan write.
1. ƒ File bertipe record
„ -------------------
Pada file bertipe dapat diakses secara urut, dapat juga diakses
secara acak. Berarti komponen- komponen di dalam file bertipe
dapat dibaca atau direkamkan di manapun di dalam file, beda dengan
file text yang hanya dapat diakses secara sequential(urut).
dalam membuka file bertipe ada 2 cara yaitu dengan ,
Rewrite -> Untuk membuat dan sekaligus membuka file baru .
Reset -> Untuk membuka file yang sudah ada.
File bertipe dapat bertipe integer, real, char, string, array dan
record , namun disini akan dibahas file bertipe record.
Untuk file bertipe baik yang dibuka dengan procedure standard
rewrite ataupun reset mempunyai sifat read/write, yaitu dapat
membaca dan merekamkan data ke dalam file bertipe sekaligus.
Sedang pada file text hanya mempunyai satu keadaan yaitu read atau
write saja.
Untuk membuat suatu file yang dibuka menjadi read-only atau write-
only dapat digunakan variabel terdefinisi yaitu : filemode
secara default Filemode bernilai 2 yang berarti bisa read/write.
„ I. Procedure dan fungsi standard untuk file bertipe
Selain procedure dan fungsi standard yang dapat digunakan untuk
semua tipe file (dapat dilihat di modul file dan directory). Masih
terdapat beberapa procedure dan fungsi standard lainya yang dapat
digunakan di file bertipe, yaitu :
… I.1. Procedure standard write dan read
write digunakan untuk merekamkan satu atau lebih nilai ke dalam
file.
Read digunakan untuk membaca satu atau lebih nilai dari file.
Perbedaan penggunaan dari procedure ini adalah terletak pada
variabel file yang digunakan.
… I.2. Procedure standard Seek
Digunakan untuk mengarahkan penunjuk file ke suatu komponen ter
tentu di dalam file, sehingga memungkinkan untuk membaca komponen
atau menuliskan komponen secara acak.
2. sintak :
seek(f;n : logint);
f = variabel file
n = posisi record
komponen pertama record adalah adalah bernomor 0.
ex :
seek(filepeg,5);
read(filepeg,No_peg,Nama,Alamat);
menunjukkan komponen record ke 6 (nomor 5) di baca dari file.
… I.3. Procedure Standard Truncate
Digunakan untuk menghapus sejumlah komponen atau record mulai dari
posisi record tertentu.
Sintak :
Truncate(F);
ex :
seek(filepeg,5);
Truncate(filepeg);
Pada contoh diatas mulai no record ke 5 (komponen ke 6) sampai
terakhir akan dihapus dari file.
… I.4. Fungsi Standard Filepos
Fungsi standard ini digunakan untuk menghasilkan letak posisi
sekarang dari penunjuk file dengan sintak :
Filepos(f):longint;
Ex :
seek(filepeg,5);
Writeln(filepos(filepeg));
Pada contoh ini, penunjuk file diarahkan ke nomor record 5 dan
bila digunakan fungsi filepos maka akan dihasilkan nilai integer 5
, yang merupakan letak dari penunjuk file.
… I.5. Fungsi standard Filesize
Fungsi standard ini digunakan untuk menghasilkan jumlah dari
komponen atau record yang tersedia di file.
sintak :
Filesize(f):longint;
Fungsi ini harus digunakan setelah file dibuka dan tidak dapat
digunakan sebelum file dibuka.
Ex :
Assign(filepeg,'Pegawai.dat');
Reset(filepeg);
writeln('Jumlah record yang ada =',filesize(filepeg));
Contoh listing program dari penanganan file bertipe record seperti
membuat file baru, menambah data record di file, mengedit data
record, dan menampilkan data record.
3. Ex.1 :
Program membuat_file_baru_dan_isi;
uses crt;
type
mahasiswa=record
npm : string[10];
nama: string[25];
kls : string[4];
ipk : real;
end;
var
filesiswa : file of mahasiswa;
{deklarasi file siswa sebagai file record mahasiswa}
recordsiswa : mahasiswa;
lagi : char;
begin
assign(filesiswa,'siswa.dat');
{menghubungkan variabel file dgn external file}
rewrite(filesiswa);
{buka file baru filesiswa jika ada akan langsung tertimpa}
lagi := 'Y';
while upcase(lagi)='Y' do
begin
clrscr;
with recordsiswa do{menyertakan penyebut record}
begin
write('N P M =');readln(npm);
write('Nama =');readln(nama);
write('Kelas =');readln(kls);
write('I P K =');readln(ipk);
end;
write(filesiswa,recordsiswa);
{menulis isi recordsiswa ke file siwa}
write('ada data lagi =');readln(lagi);
end;
close(filesiswa); {tutup filesiswa}
end.
program tampildata;
uses crt;
type
mahasiswa = record
npm : string[10];
nama : string[25];
kls : string[4];
ipk : real;
end;
var
filesiswa : file of mahasiswa;
{filesiswa adalah file bertipe record mahasiswa}
4. recordsiswa : mahasiswa;
begin
assign(filesiswa,'siswa.dat');
{hubungkan varibel file dengan external file}
reset(filesiswa); {membuka file yang sudah ada }
clrscr;
while not eof(filesiswa) do begin
read(filesiswa,recordsiswa);
{membaca isi filesiswa lalu dimasukan ke recordsiswa}
with recordsiswa do
writeln(npm:10,nama:25,kls:4,ipk:3:2);
{menampilkan dilayar}
end;
close(filesiswa);{menutup file }
readln;
end.
Program mencari_record;
uses crt;
type
mahasiswa=record
npm : string[10];
nama: string[25];
kls : string[4];
ipk : real;
end;
var
filesiswa : file of mahasiswa;
recordsiswa : mahasiswa;
CariNpm : string[10];
ketemu : boolean;
lagi : char;
begin
assign(filesiswa,'siswa.dat');
{menghubungkan varibel file dgn external file}
reset(filesiswa);{buka file yang sudah ada}
lagi := 'Y';
while upcase(lagi)='Y' do
begin
ketemu := false;
write('Npm yang dicari =');readln(carinpm);
{masukan npm yang akan dicari}
while not eof(filesiswa) do
{baca selam isi filesiswa blm habis}
begin
read(filesiswa,recordsiswa);
{baca isi filesiswa lalu dimasukan ke recordsiwa}
if recordsiswa.npm =carinpm then
begin
ketemu := true;
with recordsiswa do
5. writeln(npm:10,nama:25,kls:4,ipk:3:2);
end;
end;
if ketemu=false then
writeln('data tidak ada');
write('cari lagi =');readln(lagi);
seek(filesiswa,0);
end;
close(filesiswa);
end.
program koreksi_data;
uses crt;
type
mahasiswa=record
npm : string[10];
nama : string[25];
kls : string[4];
ipk : real;
end;
var
filesiswa : file of mahasiswa;
recordsiswa : mahasiswa;
ketemu : boolean;
lagi : char;
npmcari:string[10];
jumrec,i : integer;
begin
assign(filesiswa,'siswa.dat');
{menghubungkan tipefile dengan external file}
reset(filesiswa);{buka file yang sudah ada }
jumrec := filesize(filesiswa);
{menghitung jumlah record di file}
lagi := 'Y';
while upcase(lagi)='Y' do
begin
write('NPM yang dicari =');readln(Npmcari);
for i:= 1 to jumrec do
begin
seek(filesiswa,i-1);
{Cari record di file siswa pada posisi i}
read(filesiswa,recordsiswa);{baca isi record di file}
if recordsiswa.npm=npmcari then
begin
ketemu:=true;
with recordsiswa do
begin
writeln('npm =',npm:10);
write('npm koreksi =');readln(npm);
writeln('nama =',nama:25);
write('nama koreksi =');readln(nama);
6. writeln('Kls =',kls:4);
write('Kls koreksi =');readln(kls);
writeln('Ipk =',ipk:3:2);
write('IPK koreksi =');readln(ipk);
end;
end;
seek(filesiswa,i-1);
write(filesiswa,recordsiswa);
end;
if not ketemu then
writeln('data tidak ada');
write('isi lagi =');readln(lagi);
end;
close(filesiswa);
end.
program tambah_data;
type
mahasiswa=record
npm : string[10];
nama: string[25];
kls : string[4];
ipk : real;
end;
var
filesiswa : file of mahasiswa;
recordsiswa : mahasiswa;
lagi:char;
begin
assign(filesiswa,'siswa.dat');
{i$-}
reset(filesiswa); {i$+}
if ioresult <> 0 then rewrite(filesiswa);
lagi :='Y';
seek(filesiswa,filesize(filesiswa));
while upcase(lagi)='Y' do
begin
with recordsiswa do
begin
write('Npm =');readln(npm);
write('nama =');readln(nama);
write('kelas =');readln(kls);
write('IPK =');readln(ipk);
end;
write(filesiswa,recordsiswa);
write('isi lagi =');readln(lagi);
end;
close(filesiswa);
end.
program menu_file;
7. uses crt;
type
mahasiswa=record
npm : string[10];
nama: string[25];
kls : string[4];
ipk :real;
end;
var
filesiswa : file of mahasiswa;
recordsiswa : mahasiswa;
procedure filebaru;
var
lagi : char;
begin
assign(filesiswa,'siswa.dat');
rewrite(filesiswa);
lagi := 'Y';
while upcase(lagi)='Y' do
begin
clrscr;
with recordsiswa do
begin
write('N P M =');readln(npm);
write('Nama =');readln(nama);
write('Kelas =');readln(kls);
write('I P K =');readln(ipk);
end;
write(filesiswa,recordsiswa);
write('ada data lagi =');readln(lagi);
end;
close(filesiswa);
end;
procedure tambahdata;
var
lagi:char;
begin
assign(filesiswa,'siswa.dat');
{i$-}
reset(filesiswa); {i$+}
if ioresult <> 0 then rewrite(filesiswa);
lagi :='Y';
seek(filesiswa,filesize(filesiswa));
while upcase(lagi)='Y' do
begin
with recordsiswa do
begin
write('Npm =');readln(npm);
write('nama =');readln(nama);
8. write('kelas =');readln(kls);
write('IPK =');readln(ipk);
end;
write(filesiswa,recordsiswa);
write('isi lagi =');readln(lagi);
end;
close(filesiswa);
end;
procedure koreksidata;
var
ketemu : boolean;
lagi : char;
npmcari:string[10];
jumrec,i : integer;
begin
assign(filesiswa,'siswa.dat');
reset(filesiswa);
jumrec := filesize(filesiswa);
lagi := 'Y';
while upcase(lagi)='Y' do
begin
ketemu := false;
write('NPM yang dicari =');readln(Npmcari);
for i:= 1 to jumrec do
begin
seek(filesiswa,i-1);
read(filesiswa,recordsiswa);
if recordsiswa.npm=npmcari then
begin
ketemu:=true;
with recordsiswa do
begin
writeln('npm =',npm:10);
write('npm koreksi =');readln(npm);
writeln('nama =',nama:25);
write('nama koreksi =');readln(nama);
writeln('Kls =',kls:4);
write('Kls koreksi =');readln(kls);
writeln('Ipk =',ipk:3:2);
write('IPK koreksi =');readln(ipk);
end;
end;
seek(filesiswa,i-1);
write(filesiswa,recordsiswa);
end;
if not ketemu then
writeln('data tidak ada');
write('isi lagi =');readln(lagi);
end;
close(filesiswa);
9. end;
procedure tampildata;
begin
assign(filesiswa,'siswa.dat');
reset(filesiswa);
clrscr;
while not eof(filesiswa) do
begin
read(filesiswa,recordsiswa);
with recordsiswa do
writeln(npm:10,nama:25,kls:4,ipk:3:2);
end;
close(filesiswa);
readln;
end;
procedure caridata;
var
CariNpm : string[10];
ketemu : boolean;
lagi : char;
begin
assign(filesiswa,'siswa.dat');
reset(filesiswa);
lagi := 'Y';
while upcase(lagi)='Y' do
begin
ketemu := false;
write('Npm yang dicari =');readln(carinpm);
while not eof(filesiswa) do
begin
read(filesiswa,recordsiswa);
if recordsiswa.npm =carinpm then
begin
ketemu := true;
with recordsiswa do
writeln(npm:10,nama:25,kls:4,ipk:3:2);
end;
end;
if ketemu=false then
writeln('data tidak ada');
write('cari lagi =');readln(lagi);
seek(filesiswa,0);
end;
close(filesiswa);
end;
{modul utama}
var
10. pil : char;
flag : boolean;
label awal;
begin
flag := true;
while flag = true do
begin
awal :
clrscr;
writeln('Pilihan menu file bertipe record');
writeln('1. file baru dan isi');
writeln('2. Tambah data ');
writeln('3. Koreksi data berdasar npm ');
writeln('4. Cari data berdasar npm ');
writeln('5. Tampil data ');
writeln('6. keluar');
writeln;
write('Pilihan anda =');readln(pil);
if not (pil in ['1'..'6']) then
begin
writeln(char(7));
writeln('Data tidak ada');
goto awal;
end;
case pil of
'1' : filebaru;
'2' : tambahdata;
'3' : koreksidata;
'4' : caridata;
'5' : tampildata;
'6' : halt;
end;
end;
end.