Powered By Blogger

Kamis, 07 Januari 2016

Algoritma Pemrograman - Berkas Data Masup Acak (Random Access File)

Berkas Data Masup Acak (Random Access File)

Pada berkas data (file) masup acak, akses terhadap record data dapat dilakukan secara acak (random), tanpa harus membaca record satu per satu mulai dari posisi awal record. Keuntungannya adalah kecepatan proses lebih tinggi dibandingkan berkas data masup urut.

Berikut adalah prosedur penyimpanan data ke dalam berkas data masup acak :
  1. Buka file
  2. Siapkan buffer data
  3. Untuk data numeric harus dikonversi ke alfabetik/string
  4. Simpan data ke dalam buffer
  5. Lakukan penulisan ke dalam file


Membuka File


Perintah yang diperlukan adalah : OPEN

Bentuk Umum :

                            OPEN “R”, #nomfile, namafile, reclen
 
 




atau

OPEN namafile FOR RANDOM ACCESS akses AS #nomfile LEN = reclen
 
 





dimana,

nomfile      : bilangan bulat antara 1 sampai 255. Digunakan untuk menyatakan nomor file yang akan dibuka
namafile    :  ekspresi string untuk menunjukkan nama file
reclen         :  bilangan bulat antara 1 sampai 32.676. Digunakan untuk menyatakan jumlah byte setiap record. Parameter ini bersifat pilihan, jika tidak dipakai, maka jumlah byte per record dianggap 512 byte.
akses          :  Parameter yang menyatakan bentuk operasinya, berupa :
                     READ                :  menyebabkan file untuk pembacaan saja.
                     WRITE              : menyebabkan file untuk penulisan saja.
                     READWRITE   :  menyebabkan file untuk pembacaan dan penulisan.
                     Parameter ini bersifat pilihan. Jika tidak ditulis, maka diasumsikan file random digunakan untuk membaca dan menulis.

Contoh-contoh :

OPEN “R”, #1, “B:DataNama”

OPEN “R”, #2, “DataMhs”, 250

OPEN “DataMhs” FOR RANDOM AS #2 LEN 250

OPEN “B:DataMhs” FOR RANDOM ACCESS READ AS #2 LEN 50


Penyediaan Buffer Data


Dalam file random, perlu disiapkan suatu area penampungan sementara untuk data yang akan diakses dari file tersebut, yang disebut dengan “RANDOM BUFFER”. Untuk membentuknya digunakan statement FIELD.

Bentuk Umum :

           FIELD #nomfile, lebarfield AS varstring [, lebarfield1 AS varstring 2, …]
 
 





dimana,

nomfile      : bilangan sesuai dengan nomor file yang dibuka dengan statement OPEN
lebarfield,
lebarfield1 :  bilangan yang menyatakan panjang variabel (data) yang akan disimpan
varstring,
varstring1  : nama variabel string yang akan digunakan untuk data yang akan diakses.

Berikut ini penjelasan mengenai lebar field yang dibutuhkan untuk setiap tipe data.

Tabel 1 – Ketentuan Lebar Field
Tipe data
Lebar Field
Alpanumerik
1 byte untuk 1 karakter
Numerik Integer
2 byte
Numerik Single Precission
4 byte
Long Integer
4 byte
Numerik Double Precission
8 byte

Catatan:
Data yang disimpan ke dalam file harus dalam bentuk string.

Contoh :
Data Mahasiswa akan disimpan ke dalam file random, dengan item-item sebagai berikut :

Item
Tipe
Jumlah karakter
NPM
Alpanumerik
8 karakter
NAMA
Alpanumerik
20 karakter
ALAMAT
Alpanumerik
25 karakter
NILAI
Numerik
1 digit

Total jumlah byte yang diperlukan berdasarkan tabel 1 di atas adalah 55 byte meliputi, 8 byte untuk NPM, 20 byte untuk NAMA, 25 byte untuk ALAMAT dan 2 byte untuk NILAI.

Penyediaan buffer yang diperlukan adalah :

OPEN “R”, #1, “DataMHS”, 55
FIELD #1, 8 AS NPM$, 20 AS NAMA$, 25 AS ALAMAT$, 2 AS NILAI


Konversi Data


Berikut ini adalah tabel fungsi konversi data.

Konversi Numerik ke Karakter

Nama
Fungsi
Bentuk Umum
MKI$
Konversi numerik integer
MKI$(ekspresi integer)
MKL$
Konversi numerik Long integer
MKL$(ekspresi long integer)
MKS$
Konversi numerik single precission
MKS$(ekspresi single prec.)
MKD$
Konversi numerik Double precission
MKL$(ekspresi double prec.)

Konversi Karakter ke Numerik

Nama
Fungsi
Bentuk Umum
CVI
Konversi karakter 2 byte ke integer
CVI(2-byte string)
CVL
Konversi karakter 4 byte ke long integer
CVL(4-byte string)
CVS
Konversi karakter 4 byte ke single precission.
CVS(4-byte string)
CVD
Konversi karakter 8 byte ke double precission.
CVD(8-byte string)


Penyimpanan Data ke Buffer


Ada dua bentuk perintah untuk meletakkan data ke dalam buffer :
LSET   : meletakkan data ke dalam buffer dengan posisi merapat ke kiri
RSET  : meletakkan data ke dalam buffer dengan posisi merapat ke kanan

Bentuk Umum :

                                          LSET varstring = ekspstring
 

                                            RSET varstring = ekspstring
 
 







dimana,

varstring       : nama variabel yang telah didefinisikan dengan FIELD
ekspstring     : variabel string atau ekspresi string yang akan ditempatkan dalam buffer

Contoh :

OPEN “R”, #1, “DataMHS”, 55
FIELD #1, 8 AS NPM$, 10 AS Nama$
LSET Nama$ = “Andi”
RSET NPM$ = “5523”

Hasil dalam buffer:

A
N
D
I











5
5
2
3


Penulisan Data ke Dalam File


Untuk menuliskan data ke dalam file digunakan statement PUT.

Bentuk Umum :

                                          PUT #nomFile [, nomRec]
 
 



dimana,

nomFile        :  nomor file yang akan digunakan untuk menyimpan data
nomRec        :  bilangan bulat antara 1 sampai 2.147.483.647 yang menyatakan nomor record tempat data disimpan

Contoh :

Menyimpan data pada posisi record ke-2

PUT #1, 2

Contoh Aplikasi 1


Pembuatan file random untuk menyimpan data mengenai nama, alamat, dan nomor telepon. Nama filed yang akan dibuata adalah TELEPON.DTA. Isi record file adalah :
Item                 Jenis                            Jumlah karakter
Nama               Alpanumerik               20 karakter
Alamat                        Alpanumerik               30 karakter
Telepon           Numerik                      7 digit 

‘====================================================
‘Program      : RANDOM1.BAS
‘Keterangan   : Contoh penulisan data ke file random
‘====================================================
OPEN “R”, #1, “C:\DATA\TELEPON.DTA”, 57
FIELD #1, 20 AS Nama$, 30 AS Alamat$, 7 AS Telepon$

Nm$ = “ “
NoRec = 1
WHILE Nm$ <> ““
     CLS
     LOCATE 5, 10: PRINT “Nama    : “
     LOCATE 6, 10: PRINT “Alamat  : “
     LOCATE 7, 10: PRINT “Telepon : “
     LOCATE 5, 19: LINE INPUT Nm$
     IF Nms = “” THEN END
     LOCATE 6, 19: LINE INPUT Alm$
LOCATE 7, 19: LINE INPUT Tlp$
LSET Nama$ = Nm$
     LSET Alamat$ = Alm$
     LSET Telepon$ = Tlp$
     PUT #1, NoRec
     NoRec = NoRec + 1
WEND
CLOSE
END


Penggunaan Statement TYPE .. END TYPE

 

Statement TYPE .. END TYPE digunakan untuk mendefinisikan suatu variabel record. Dengan menggunakan variabel record, data dapat disimpan ke dalam file random tanpa memerlukan proses konversi data.

 

Untuk membentuk variabel record dari contoh aplikasi di atas, maka pendefinisian yang harus dilakukan adalah :

 

TYPE JenisData

     Nama AS STRING * 20

     Alamat AS STRING * 30

     Telepon AS LONG
END TYPE

Pernyataan yang tertulis di dalam blok statement TYPE .. END TYPE merupakan definisi untuk tiap-tiap variabel dan hanya menentukan jenis dan ukuran variabel. Untuk membentuk variabel record yang akan digunakan untuk menampung data digunakan statement DIM.

DIM ContohRec AS JenisData

Dengan menggunakan statement TYPE .. END TYPE, maka bentuk umum statement PUT adalah  :

                                  PUT #nomFile [, nomRec], varRecord
 
 




dimana,

varRecord       : variabel record yang telah didefinisikan dengan statement DIM


Contoh Aplikasi 2


Pembuatan program yang identik dengan Contoh Aplikasi 1 dengan menggunakan statement TYPE .. END TYPE

‘====================================================
‘Program      : RANDOM2.BAS
‘Keterangan   : Contoh penulisan data ke file random
‘====================================================
OPEN “R”, #1, “C:\DATA\TELEPON.DTA”, 57

TYPE Data1

     Nama AS STRING * 20

     Alamat AS STRING * 30

     Telepon AS LONG
END TYPE

DIM DataNama AS Data1

Nm$ = “ “
NoRec = 1
WHILE Nm$ <> ““
     CLS
     LOCATE 5, 10: PRINT “Nama    : “
     LOCATE 6, 10: PRINT “Alamat  : “
     LOCATE 7, 10: PRINT “Telepon : “
     LOCATE 5, 19: LINE INPUT Nm$
     IF Nms = “” THEN END
     DataMhs.Nama = Nm$
     LOCATE 6, 19: LINE INPUT DataMhs.Alamat
LOCATE 7, 19: LINE INPUT DataMhs.Telepon
     PUT #1, NoRec, DataMhs
     NoRec = NoRec + 1
WEND
CLOSE
END


Pembacaan Data


Untuk membaca data yang tersimpan di dalam file random, maka gunakan statement GET.


   GET #nomFile [, nomRec]
 
Bentuk Umum :


atau jika record didefinisikan dengan statement TYPE .. END TYPE

                                 GET #nomFile [, nomRec], varRecord
 
 





Contoh-1 :

Mengambil data pada posisi record ke-3

OPEN “Kartu” FOR RANDOM AS #1 LEN = 22
FIELD #1, 20 AS Nama$, 2 AS Usia
GET #1, 3
END

Contoh-2 :

TYPE JenisData
     Nama AS STRING * 20
     Usia AS INTEGER
END TYPE

DIM RecData AS JenisData
OPEN “Kartu” FOR RANDOM AS #1 LEN = 22
GET #1, 3, RecData
END





Contoh Aplikasi 3


Membuat program untuk mencetak record-record yang tersimpan dalam file TELEPON.DTA

‘======================================================
‘Program      : RANDOM3.BAS
‘Keterangan   : Contoh pembacaan data dari file random
‘======================================================
OPEN “R”, #1, “C:\DATA\TELEPON.DTA”, 57
FIELD #1, 20 AS Nama$, 30 AS Alamat$, 7 AS Telepon$

noRec = 1
CLS
PRINT “NAMA        ALAMAT             TELEPON”
PRINT “----------------------------------------”
WHILE NOT EOF(1)
     GET #1, noRec
     Telp& = CVL(Telepon$)
     PRINT Nama$, Alamat$, Telp&
     noRec = noRec + 1
WEND
CLOSE
END


Contoh Aplikasi 4


Membuat program untuk mencetak record-record yang tersimpan dalam file TELEPON.DTA. Pembacaan record menggunakan variabel record yang didefinisikan oleh statement TYPE .. END TYPE.


‘======================================================
‘Program      : RANDOM4.BAS
‘Keterangan   : Contoh pembacaan data dari file random
‘======================================================
 ‘
OPEN “R”, #1, “C:\DATA\TELEPON.DTA”, 57
TYPE Data1

     Nama AS STRING * 20

     Alamat AS STRING * 30

     Telepon AS LONG
END TYPE

DIM DataMhs as Data1

noRec = 1
CLS
PRINT “NAMA        ALAMAT             TELEPON”
PRINT “----------------------------------------”
WHILE NOT EOF(1)
  GET #1, noRec, DataMhs
  PRINT DataMhs.Nama, DataMhs.Alamat, DataMhs.Telepon
  noRec = noRec + 1
WEND
CLOSE
END



Tidak ada komentar:

Posting Komentar