MODUL 9
PENGOLAHAN FILE ACAK
Pada file sequential pengolahan datanya bersifat FIFO, tetapi
dalam pengolahan data kadang-kadang diperlukan proses pengolahan
yang sifatnya acak sehingga pengolahannya dapat dilakukan dengan
cepat dan sederhana.
File sequential banyak digunakan pada ekspor/impor data antar
sistem dimana format pada sistem yang satu tidak dikenali oleh
sistem lain, sehingga data dari suatu sistem perlu diekspor dalam
bentuk teks, kemudian diimpor kembali oleh sistem lain. Pada
pengolahan seperti ini tentu saja proses pengolahannya bersifat
FIFO.
Pengolahan data yang membutuhkan pencarian, pengurutan dan
perbaikan data tentu saja sulit menggunakan proses pengolahan
FIFO, karena akan menggunakan sumber daya yang besar dan menjadi
rumit. Pada pengolahan data seperti ini sangat dibutuhkan proses
pemasukan maupun pengambilannya berdasarkan alamat data tersebut.
Agar data dapat diambil dengan cepat, tentu saja dalam
penyimpannannya membutuhkan keteraturan, yaitu setiap data
memiliki ukuran yang sama, sehingga alamat data dapat didapatkan
dengan cepat.
FILE ACAK
File acak didalam pengolahannya data ditempatkan dalam bentuk
record yang memiliki panjang yang tertentu. Dengan sistem
pengolahan yang demikian suatu record data dapat langsung dibaca
ataupun ditulis tanpa harus memproses record sebelumnya. Dalam
hal ini type data record akan berperan.
Contoh :
TYPE SISWA
NOINDUK AS STRING * 10
NAMA AS STRING * 15
TEORI AS SINGLE
PRAKTEK AS SINGLE
RATA AS SINGLE
END TYPE
Dim DAT As SISWA
Perintah pengolahan file ACAK
1. Perintah membuka file ACAK
Sebelum suatu file randon dapat digunakan harus dibuka, jika file
tersebut belum ada, maka akan dibuat yang baru. Adapun perintah
membuka file ACAK adalah sebagai berikut :
OPEN namafile FOR RANDOM AS [#]filenum [LEN=reclen]
Contoh :
OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT)
Membuka file "siswa.rec" untuk diolah secara acak sebagai file
nomor 1 dan ukuran tiap record adalah sama dengan ukuran variabel
DAT.
2. Mendapatkan jumlah record pada file ACAK yang telah terbuka.
JlhRec = LOF(1)/LEN(DAT)
Jumlah record dalam file ACAK adalah ukuran keseluruhan file ACAK
dibagi dengan ukuran tiap record.
3. Perintah input/output pada file ACAK
Perintah menulis data
PUT [#]filenum[,nomorrecord][,variable]
Contoh :
DAT.NOINDUK = "920403024"
DAT.NAMA = "Hendra"
DAT.TEORI = 70
DAT.PRAKTEK = 80
DAT.RATA = (DAT.TEORI+DAT.PRAKTEK)/2
PUT #1,JlhRec+1,DAT
Menyimpan data dari variabel DAT ke file ACAK nomor 1, sebagai
record baru pada akhir file (JlhRec+1).
Perintah membaca data
GET [#]filenum[,nomorrecord][,variabel]
Contoh :
GET #1,1,DAT
Membaca data record nomor 1 dari file ACAK nomor 1 ke variabel
DAT.
4. Perintah menutup file ACAK
Setelah selesai digunakan, file ACAK perlu ditutup untuk
memastikan semua data ditulis ke media penyimpanan, dan
memberikan indikator EOF.
Contoh :
CLOSE #1
Menutup file acak nomor 1.
Contoh sederhana program pengolahan data dengan file ACAK.
'PROGRAM MENGISI DATA KE FILE SISWA.REC
TYPE SISWA
NOINDUK AS STRING * 10
NAMA AS STRING * 15
TEORI AS SINGLE
PRAKTEK AS SINGLE
RATA AS SINGLE
END TYPE
DIM DAT AS SISWA
DIM NOINDUK AS STRING
OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT)
RECNO = LOF(1)/LEN(DAT)
DO
PRINT "DATA SISWA KE -";I
INPUT "NO.INDUK :",NOINDUK
IF NOINDUK <> "" THEN
DAT.NOINDUK = NOINDUK
INPUT "NAMA :",DAT.NAMA
INPUT "TEORI :",DAT.TEORI
INPUT "PRAKTEK :",DAT.PRAKTEK
DAT.RATA = (DAT.TEORI+DAT.PRAKTEK)/2
PUT #1,RECNO+1,DAT
RECNO = RECNO + 1
ENDIF
LOOP UNTIL NOINDUK = ""
CLOSE #1
END
'PROGRAM MENGURUT DATA DI FILE SISWA.REC
TYPE SISWA
NOINDUK AS STRING * 10
NAMA AS STRING * 15
TEORI AS SINGLE
PRAKTEK AS SINGLE
RATA AS SINGLE
END TYPE
DIM DAT1 AS SISWA
DIM DAT2 AS SISWA
OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT)
JD = LOF(1)/LEN(DAT)
FOR I = (JD-1) TO 1 STEP -1
Sempurna = 1
FOR J = 1 TO I STEP 1
GET #1,J,DAT1
GET #1,J+1,DAT2
IF DAT1.NAMA > DAT2.NAMA THEN
PUT #1,J,DAT2
PUT #1,J+1,DAT1
Sempurna = 0
ENDIF
NEXT J
If Sempurna = 1 Then
I = 0
End IF
NEXT I
CLOSE #1
END
'PROGRAM BACA DATA DARI SISWA.REC DAN MENCETAK KE LAYAR
CLS
TYPE SISWA
NOINDUK AS STRING * 10
NAMA AS STRING * 15
TEORI AS SINGLE
PRAKTEK AS SINGLE
RATA AS SINGLE
END TYPE
DIM DAT AS SISWA
OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT)
JD = LOF(1)/LEN(DAT)
PRINT -------------------------------------------------------------------"
PRINT "NO.INDUK NAMA TEORI PRAKTEK RATA-RATA ULUS "
PRINT "-------------------------------------------------------------------"
POLA$="\ \ \ \ ###.## ###.## ###.## \ \ "
VIEW PRINT 4 TO 23
FOR I = 1 TO JD STEP 1
GET #1,I,DAT
IF DAT.RATA < 60 THEN LULUS$="TIDAK" ELSE LULUS$ = "YA"
PRINT USING POLA$;DAT.NOINDUK;DAT.NAMA$;DAT.TEORI;
DAT.PRAKTEK;DAT.RATA;LULUS$
NEXT I
CLOSE #1
END
LATIHAN
1. Buatlah program untuk mengisi data ke file PEGAWAI.REC.
NAMA GOL JAM KERJA
SURYAJAYA A 50
SUTIMAN C 48
JUSMAN B 60
WIJAYA A 50
YUSNI B 48
TUTI A 45
2. Buatlah program mengurut data pada PEGEWAI.REC berdasarkan
nama.
3. Buatlah program membaca data dari file PEGAWAI.REC dan
menghasilkan laporan dengan ketentuan.
- Gaji Pokok PEGAWAI ditentukan sebagai berikut :
Golongan Gaji Pokok/Bulan
A Rp. 175.000,00
B Rp. 220.000,00
C Rp. 350.000,00
- jika jam kerja > 48 jam diberikan Bonus = (jam kerja - 48) * 5000/jam
- jika jam kerja < 48 jan dikenakan Potongan = (48 - jam kerja) * 1000/jam
- Total Gaji = Gaji Pokok + Bonus - Potongan
Output yang diharapkan :
P.T. JAYA WIJAYA
JL. Kemerdekaan Barat No. 12
============================
LAPORAN GAJI PEGAWAI
========================================================
Nama Gol Jam Gaji Bonus Potongan Total
Pegawai Kerja Pokok (Rp) (Rp) (Rp)
--------------------------------------------------------
Suryajaya C 50 350,000 10,000 - 360,000
Sutiman B 48 200,000 - - 200,000
========================================================
Total : 560,000
========================================================