arsip beruntunsi.ilkom.unsri.ac.id/wp-content/uploads/2018/11/bab-iv...rekaman adalah head. posisi...
TRANSCRIPT
ARSIP BERUNTUN
BAB IV
DEFENISI
Arsip (File) adalah struktur penyimpanan
data didalam memori sekunder seperti
disk
Data disimpan didalam arsip agar
sewaktu-waktu dapat diakses kembali
Setiap item data yang direkam didalam
arsip disebut rekaman (record)
Lanjutan…
Rekaman tersebut diorganisasikan
penyimpanannya
Ada 2 metode pengorganisasian :
Arsip Beruntun (sequential)
Arsip Acak (random) / Direct Access
Arsip Beruntun
Penyimpanan rekaman secara berurutan, rekaman yang satu setelah rekaman yang lainnya
Untuk mengakses data tertentu, program harus mengakses mulai dari rekaman pertama sampai rekaman yang diinginkan
Pengaksesan arsip jenis ini, biasanya sangat lambat, khususnya bila arsip berukuran besar, Namun arsip beruntun mudah dibuat dan dipelihara
Arsip Acak
Rekaman diakses secara langsung, tanpa
memulai dari awal.
Keuntungan jenis arsip ini, pengaksesan
data individual lebih cepat daripada arsip
beruntun, tetapi arsip acak lebih sulit
dibuat dan dipelihara.
Defenisi Arsip Beruntun
Sekumpulan rekaman bertipe sama yang
diakses secara beruntun mulai dari rekaman
pertama sampai rekaman yang terakhir
Rekaman pada arsip beruntun diakses satu
persatu secara searah
Rek 1 Rek2 ….. RekN
Urutan Akses (satu-per Satu)
Rekaman 1 Rekaman 2
Tanda Akhir Arsip Beruntun Pada arsip beruntun akhir file ditandai
dengan menambahkan sebuah rekaman fiktif yang berfungsi sebagai “penanda” akhir arsip.
Bila pembacaan arsip menemui tanda tersebut, maka pemrosesan arsip dihentikan,
Rekaman fiktif tersebut dinamakan “mark” Fungsi mark pada arsip sama dengan fungsi karakter “.”
Pendeklarasian Arsip didalam
Algoritma
Deklarasi
NamaArsip : SeqFile of TipeRekaman
Cara deklarasi arsip beruntun sebagai tipe
bentukan :
type ArsipBeruntun : SeqFile of TipeRekaman
NamaArsip : ArsipBeruntun
Contoh :
Arsip bil berisi sekumpulan bilangan bulat
Deklarasi
bil : seqfile of integer {nama arsip bilangan bulat}
Mendefinisikan arsip bilangan bulat sebagai tipe bentukan
Deklarasi
type ArsipBil : seqfile of integer
bil : ArsipBil
Lanjutan…
Arsip MHS yang berisi data mahasiswa (NIM, Nama, dan IPK)
Deklarasi
Type datamhs : record <NIM : integer,
Nama : string,
IPK : real>
MHS : seqfile of datamhs
Mendefinisikan arsip diatas sebagai tipe baru
tipe arsipmhs : seqfile of datamhs
Mhs : arsipmhs
Arsip KAR yaitu arsip yang berisi data bertipe
karakter. Setiap rekaman bertipe karakter
Deklarasi :
KAR : Seqfile of char ;
Contoh Arsip
1.
2.
3.
359601 ' Adi Purwanto ' 3,82
359604 ' Fitria Handini ' 2,97
359605 ' Dewi Kurniati ' 2,74
359606 ' Andrie Irwansyah ' 3,02
359608 ' Cahyo Kumolo ' 2,05
359610 ' Anton Previanto ' 3,99
999999 x' 9,99
345 78 120 0 26 698 125 237
999
9
'h' 'a' 'I' 'o' 'k' 'a' 'w' 'a' 'n' ' '
Instruksi Baku untuk arsip beruntun
Instruksi baku tersebut berupa prosedur
atau fungsi yang dianggap sudah
tersedia sehingga apat langsung dipakai
tanpa perlu mendefinisikan prototypenya.
Instruksi baku dilakukan dengan
memanggil prosedur yang dimaksud
1. OPEN
Fungsi :
Membuka arsip beruntun untuk siap dibaca / ditulis. Setelah memanggil fungsi ini pointer pembacaan/penulisan akan menunjuk ke awal rekaman pertama
Keterangan :
Piranti keras yang melakukan operasi baca/tulis rekaman adalah head. Posisi awal rekaman yang ditunjuk oleh head ditunjuk secara logik dengan suatu pointer
Prosedur OPEN
Procedure OPEN( Input NamaArsip :
ArsipBeruntun, Input kode :Integer)
{Membuka arsip beruntun nama arsip siap dibaca/ditulis, kode 1 artinya
dibuka untuk dibaca, kode 2 artinya dibuka untuk direkam }
Contoh :
OPEN (MHS, 1) {Arsip MHS dibuka untuk dibaca}
OPEN (BIL, 2) {Arsip BIL dibuka untuk ditulis}
OPEN (KAR, 1) {Arsip KAR dibuka untuk dibaca}
2. FREAD
Fungsi :
Membaca rekaman yang sekarang sedang
ditunjuk oleh pointer pembacaan.
Contoh :
FREAD (MHS, RekMhs)
FREAD (BIL, I)
FREAD (KAR, ch)
3. FWRITE
Fungsi
Menulis rekaman kedalam arsip beruntun
Procedure FWRITE :
FWRITE (MHS, <456901, “Ida Bagus Adi
Sudewa‟, 4.23>)
FWRITE (BIL,765) {menambah 765 ke arsip BIL}
FWRITE (KAR,‟R‟) {menambah R pada KAR}
4. Close
Fungsi
Menutup arsip yang telah dibuka untuk
pembacaan atau dibuka untuk perekaman
Contoh :
Close (MHS)
Close (BIL)
Close (ArsipKar)
Mark
Fungsi Mark mengembalikan nilai true jika tanda
akhir arsip dicapai atau false jika tidak
Contoh :
Function Mark (input x : integer)
Deklarasi
{tidak ada}
Deskripsi
return (x = 9999)
- Function Mark (input M : DataMhs)
Deklarasi
{tidak ada}
Deskripsi
return (M.nim = 9999 and M.nama = „x‟ and M.IPK = 9.99)
- Function Mark (input c : char)
Deklarasi
{tidak ada}
Deskripsi
return (c = „.‟)
Membuat Arsip Beruntun
Arsip hanya dapat di proses jika sudah
terdefinisi isinya. Langkah-langkah :
1. Menyiapkan arsip untuk perekaman
(gunakan perintah OPEN dengan Kode=2)
2. Membaca file yang direkam
3. Menulis data yang akan direkam ke dalam
arsip (dgn perintah FWRITE)
4. Jika arsip sudah selesai,arsip ditutup
dengan perintah CLOSE
Contoh :
Algoritma IsiArsipBilangan_1
Deklarasi :
BIL : Seqfile of integer
N : integer
k : integer
Deskripsi
OPEN (BIL,2)
read(N)
for k 1 to N do
FWRITE (BIL,k)
endfor
Write (BIL, 9999)
CLOSE (BIL)
Algoritma IsiArsipBilanganBulat_2
Deklarasi :
FINT : Seqfile of integer
N : integer
k : integer
x : integer
Deskripsi
OPEN (FINT,2) { buka arsip FINT untuk perekaman }
read (N)
for k 1 to N do
read (x)
FWRITE (FINT,k)
endfor
Write (FINT, 9999)
CLOSE (FINT)
Membaca Arsip Beruntun
Langkah pertama adalah menyiapkan
arsip untuk pembacaan (OPEN dengan
kode=1)
Langkah kedua ada 2 yaitu :
Menangani arsip kosong secara khusus
Tidak menangani
Pemakaian langkah ke 2 tergantung dari
spesifikasi persoalan
Deklarasi :
BIL : Seqfile of integer
N : integer
x : integer
Function MARK (input x : integer) boolean
{Mengembalikan nilai true jika x adalah rekaman tanda akhir arsip atau false jika tidak}
Deskripsi
OPEN (BIL,1) {buka arsil BIL untuk membaca}
FREAD (BIL,x)
if MARK (x)
write („Arsip kososng”)
else
repeat
WRITE (x)
FREAD(BIL,x)
Until MARK(x)
endif
CLOSE (BIL)
Deklarasi :
BIL : Seqfile of integer
N : integer
x : integer
Function MARK (input x : integer) boolean
{Mengembalikan nilai true jika x adalah rekaman tanda akhir arsip atau false jika tidak}
Deskripsi
OPEN (BIL,1) {buka arsil BIL untuk membaca}
FREAD (BIL,x)
While not MARK (x)
WRITE (x)
FREAD(BIL,x)
endwhile
CLOSE (BIL)
Contoh :
Pengelolaan Arsip pegawai
135001 ' Laila ' ' IIIa ' ' Asisten Ahli ' 1150000
135002 ' Raihan ' ' IIIa ' ' Asisten Ahli ' 1150000
135003 ' Namira ' ' IIIb ' ' Lektor ' 1500000
135004 ' Naila ' ' IIIa ' ' Asisten Ahli ' 1150000
135005 ' Az_zahra ' ' IIIa ' ' Asisten Ahli ' 1150000
135006 ' Nania ' ' IVa ' ' Lektor Kepala ' 1750000
999999 „xxxxxx‟ „xxxxx‟ „xxxx‟, 9999999
NIRP Nama Gol Pangkat Gaji
Contoh Program_rekam_data_pegawai
Deklarasi
Type DataPeg : record < nirp : integer, nama : string, gol : string, pangkat : string, gaji : integer >
Type ArsipPeg : SeqFile of DataPeg
Pegawai : ArsipPeg
Function Mark (input : RekPeg : DataPeg)
Procedure Rekam_data_pegawai
Deklarasi :
KelolaPeg : DataPeg
Deskripsi :
OPEN (pegawai, 2) {buka arsip Pengelolaan untuk perekaman}
read (kelolaPeg.nirp) {baca data nirp pertama, mungkin 9999}
While (kelolaPeg.nirp <>9999)
read (kelolaPeg.Nama)
read (kelolaPeg.gol)
read (kelolaPeg.pangkat)
read (kelolaPeg.gaji)
FWRITE (Pegawai, kelolaPeg) {rekaman kelolapeg kedalam arsip Pegawai)
read (kelolaPeg.nirp)
EndWhile
{kelolapeg.nirp = 99999)
FWRITE (Pegawai, < 999999, „xxxxxx‟, „xxxxx‟, „xxxx‟, 9999999 >
CLOSE (pegawai)
Contoh
Procedure Tampilkan_data_pegawai
Deklarasi :
kelolaPeg : DataPeg
Deskripsi :
OPEN (pegawai, 1)
{buka arsip Pegawai untuk dibaca}
FREAD (kelolaPeg.nirp)
{baca data nirp pertama, mungkin 9999}
While (KelolaPeg.nirp <>
9999)
FREAD (pegawai,
kelolapeg)
Write (‘nirp = ‘)
Write (kelolapeg.nirp)
Write (‘nama = ‘)
Write (kelolapeg.nama)
Write (‘gol = ‘)
Write (kelolapeg.gol)
Write („pangkat = „)
Write (kelolapeg.pangkat)
Write („gaji = „)
Write (kelolapeg.gaji)
FREAD (kelolaPeg.nirp)
End while;
{kelolaPeg.nirp = 9999}
CLOSE (pegawai)
Menyalin Arsip
Menyalin arsip artinya mengkopi arsip ke
arsip lain
Penyalinan dapat dilakukan terhadap
seluruh rekaman atau hanya rekaman
tertentu saja
type DataMhs : record <NIM : integer, Nama : string, IPK : real>
ArsipMhs : SeqFile of DataMhs :
MHSl, MHS2 : ArsipMhs
function MARK (input RekMHS : DataMhs) ->boolean
{ Mengembalikan nilai true jika RekMHS adalah rekaman tanda akhir arsip; atau false jika tidak) .
Menyalin seluruh rekaman di dalam
arsip MHS1 ke arsip baru MHS2
procedure SalinArsip ( Menyalin seluruh isi arsip MHS1 ke arsip MHS2. }
{ K.Awal : sembarang }
( K.Akhir: MHS2 berisi salinan seluruh rekaman dari arsip MHS1 )
DEKLARASI
RekMHS : DataMhs
DESKRIPSI:
OPENIMHS1, 1) { buka arsip MHS1 untuk pembacaan } OPEN(MHS2, 2) { buka arsip MHS2 untuk penulisan } FREAD(MHS1, RekMHS) { baca rekaman pertama, mungkin TANDA }
while (not MARK(RekMHS)) do
FWRITE(MHS2, RekMHS) { salin RekMHS ke arsip MHS2 } FREAD(MHS1, RekMHS) { baca RekMHS dari arsip MHS1 }
endwhile
{ MARK (RekMHS! }
FWRITE(MHS2, <999999, 'X', 99.9>) { tulismark }
CLOSE(MHS1)
CLOSE(MHS2)
Menyalin data mahaiswa yang IPK-nya di
atas 2.0 dari arsip MHS1 arsip baru MHS2 procedure SalinYangLulusSaja
{ Menyalin data mahasiswa yang IPK-nya di atas 2.0. Data mahasis
dibaca dari arsip MHS1. }
{ K.Awal : sembarang }
{ K.Akhir: MHS2 berisi data mahasiswa yang lulus dengan IPK > 2.0. )
DEKLARASI
RekMHS : DataMhs
DESKRIPSI:
OPEN(MHS1, 1) { buka arsip MHS1 untuk pembacaan )\
OPEN(MHS2, 2) { buka arsip MHS2 untuk penulisan }
FREAD(MHS1, RekMHS) { baca rekaman pertama, mungkin TANDA }
while not MARK(RekMHS) do
if RekMHS.IPK > 2.0 then
FWRITE(MHS2, RekMHS)
endif
FREAD(MHS1, RekMHS) { baca rekaman selanjutnya }
endwhile { MARK tRekMHS) }
FWRITE(MHS2, <999999, 'X', 99.9>) { tulismark }
CLOSE(MHS1)
CLOSE(MHS2)
Penggabungan Arsip
Penggabungan dua buah arsip dengan
penyambungan
Menyalin isi dua buah arsip kedalam sebuah
arsip baru. Arsip-arsip yang akan digabung
mungkin belum terurut (berdasarkan field
tertentu) atau mungkin sudah terurut
Cara penggabungannya adalah dengan
penyambungan (concatenation)yaitu menyalin
arsip kedua setelah arsip pertama.
DEKLARASI
type DataMhs : record <NIM : integer, Nama : string, IPK : real>
type ArsipMhs : SeqFile of DataMhs
MHS1, MHS2, MHS3 : ArsipMhs
function MARK(input RekMHS : DataMhs) boolean
{Mengembalikan nilai true jika RekMHS adalah rekaman tanda akhir
arsip; atau false jika tidak}.
Prosedur penggabungan arsip : procedure GabungArsipl
{ Menggabungkan dua buah arsip, MHS1 dan MHS2, menjadi sebuah arsip baru MHS3, dengan cara menyambung isi arsip MHS1 dengan isi arsip MHS2 kedalam arsip MHS3. }
{ K.Awal : sembarang. }
( K.Akhir: arsip MHS3 berisi hasil penggabungan MHS1 dan MHS2 }
DEKLARASI
RekMHS : DataMHS
DESKRIPSI
OPEN(MHS1, 1) { buka arsip MHS1 untuk pembacaan }
OPEN(MHS2, 1) { buka arsip MHS2 untuk pembacaan }
OPEN(MHS3, 2) { buka arsip MHS3 untuk penulisan }
FREAD(MHS1, RekMHS)
( baca rekaman pertama dari MHS1, mungkin mark
while (not MARK(RekMHS} do
FWRITE(MHS3, RekMHS)
FREAD(MHS1, RekMHS)
endwhile { MARK (RekMHS) }
{ Sambung MHS2 setelah MHS1 }
FREAD(MHS2, RekMHS) { baca rekaman pertama dari MHS2, mungkin mark
while (not MARK(RekMHS) do
FWRITE(MHS3, RekMHS)
FREAD(MHS2, RekMHS) endwhile { MARK (RekMHS) }
FWRITEIMHS3, <999999, 'X', 99.9>) { tulis mark }
CLOSE(MHS1)
CLOSE(MHS2)
CLOSE(MHS3)
Penggabungan Arsip
Penggabungan arsip terurut
Cara penggabungan sama seperti
concatenation
Pemutakhiran Arsip
Pemuktakhiran (updating adalah proses yang dilakukan untuk mengubah nilai suatu rekaman didalam arsip. Arsip dimutakhirkan dengan nilai baru yang dibaca dari piranti masukan atau dibaca dari arsip transaksi lain
sebuah arsip beruntun tidak dapat dibaca sekaligus ditulisi. Sebuah arsip hanya dapat dibuka untuk pembacaan saja atau untuk penulisan saja. Jadi, tidak mungkin membaca rekaman di dalam arsip, mengubahnya, dan kemudian menuliskannya kembali ke arsip tersebut.
keterbatasan ini menyebabkan pemutakhiran arsip merupakan proses yang rumit. Pemutakhiran arsip memerlukan dua buah arsip. Satu arsip (arsip master} adalah arsip asaI yang akan dimutakhirkan, dibuka untuk pembacaan. Arsip kedua (arsip temporer), yang dibuka untuk penulisan, berisi rekaman dari arsip lama plus rekaman yang sudah dimutakhlirkan. Jadi, arsip master merupakan arsip masukan, sedangkan arsip temporer merupakan arsip keluaran. Setelah pemutakhiran, isi arsip temporer disalin kembali, ke arsip master.
Deklarasi arsip data mahasiswa
(untuk pemutakhiran) type ArsipMHS record <NIM : integer, Nama : string, IPK : real>
type ArsipMHS : SeqFile of DataMHS
MAST : ArsipMHS { natna arsip master }
TEMP : ArsipMHS { nanta arsip temporer }
function MARK(input RekMHS : DataMhs) boolean { Mengembalikan nilai true jika RekMHS adalah rekaman tanda akhir arsip; atau false jika tidak}.
misalkan arsip MAST menyimpan data mahasiswa (NIM, Nama, IPK) arsip MAST mungkjn kosong.
Jika akan menambah isi arsip MAST(setelah rekaman terakhir) dengan sejumlah data baru yang dibaca dari piranti masukan. Pembacaan data berakhir jika NIM yang dimasukan adalah 9999. Langkah-langkahnya adalah:
(i). buka arsip MASTuntuk pembacaan
(ii) buka arsip TEMP untuk penulisan
(iii) baca seluruh rekaman dari arsip MAST, lalu tuliskan ke arsip
TEMP
(iv) baca data baru dari piranti masukan, tulis ke arsip TEMP
(v) buka arsip TEMP untuk pembacaan
(vi) buka arsip MAST untuk penulisan
(vii) baca seluruh rekaman dari arsip TEMP, lalu tuliskan ke arsip
TEMP
procedure TambahDataMahasiswa
{ Menambah sejumlah data baru ke arsip MAST; data dibaca dari piranti masukan, proses penambahan data berhenti jika NIM yang dibaca = 9999 { K.Awal : arsip MAST mungkin kosong. } ( K.Akhir: arsip MAST berisi da,ta plus data yang baru. }
DEKLARASIRekMHS DataMhs
DESKRIPSI:OPEN(MAST, 1) OPEN(TEMP, 2) { buka arsip MAST untuk pembacaan } { buka arsip TEMP untuk penulisan }
{ baca seluruh rekaman dari MAST, tulis ke TEMP }
FREAD(MAST, RekMHS) ( baca rekaman pertama dari MAST, mungkin
while not MARK(RekMHS) do
FWRITE(TEMP, RekMHS)
FREAD(MAST, RekMHS) endwhile { MARK(REkMHS) }
read (RekMHS. NIM) (baca data NIM pertama dari piranti masu
mungkin 9999 } while(RekMHS.NIM * 9999) do {baca data field lainnya}
read(RekMHS.Nama)
read(RekMHS.IPK)
FWRITEIKULIAH, KuliahMHS) {rekam KuliahMHS ke dalam arsip KULItt
read(KuliahMHS.NIM) endwhile { KuliahMHS.NIM = 9999}
FWRITEfKULIAH, <9999999, 99.9>)
CLOSE(KULIAH)