PENGOLAHAN FILE ACAK
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
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)
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
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).
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.
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.
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
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
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 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 :
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 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
============================
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
========================================================
========================================================
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
========================================================