Arsip Beruntun • Informasi yang disimpan di dalam media penyimpan sekunder dikelompokkan dalam bentuk arsip (file). • Suatu arsip merupakan organisasi dari sejumlah rekaman. Masing-masing rekaman dapat terdiri dari satu atau beberapa field dan setiap field dapat terdiri dari satu atau beberapa byte. • Informasi yang disimpan oleh satu buah arsip atau lebih berkategori sama. Contohnya data mahasiswa disimpan dalam arsip mahasiswa, data nilai mahasiswa disimpan dalam arsip nilai mahasiswa, data buku komputer disimpan dalam arsip buku komputer, dll. • Catatan nama setiap arsip harus unik (tidak boleh sama). Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
1
• Informasi yang direkam di dalam arsip disebut rekaman (record). • Metode pengorganisasian rekaman dalam pengarsipan dibedakan sebagai berikut: 1. arsip beruntun (sequential file); 2. arsip acak (random file); 3. arsip berindeks (indexed file; 4. dll. Kamis, 25 Mei 2006
Definisi Arsip Beruntun
Algoritma dan Pemrograman II
2
Contoh Arsip Beruntun
• Arsip beruntun adalah sekumpulan rekaman yang disimpan di dalam penyimpanan sekunder komputer, yang dapat diakses secara beruntun mulai dari rekaman pertama sampai dengan rekaman terakhir, rekaman demi rekaman secara searah.
Arsip mahasiswa yang berisi NIM, Nama dan IPK. type DataMhs : record
type ArsipMhs : SeqFile of DataMhs and MARK = <99999999999,'.',0.00> MHS : ArsipMhs
• Karena komputer "tidak mengetahui" akhir arsip, maka di dalam arsip beruntun ditambahkan rekaman fiktif yang berfungsi sebagai "tanda" bahwa akhir arsip sudah tercapai sehingga pembacaan rekaman dihentikan. Rekaman fiktif ditambahkan sesudah rekaman terakhir.
• • • • •
08053110001 08053110021 08053110029 08053110030 99999999999
Abdullah 3.10 Fidha Rozak 2.87 Sumiati 3.65 Mila Rossa 2.21 . 0.00
• Setiap rekaman boleh bertipe dasar maupun tipe terstruktur yang telah didefinisikan. Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
3
Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
4
1
Perintah Dasar Arsip Beruntun 1.
Dalam program bahasa C/C++ Prototype fungsi fopen() ada di header fungsi “stdio.h” Bentuk umum : FILE *fopen(char *namafile, char *mode);
OPEN Sebelum arsip dapat diakses (dibaca atau ditulis) mula-mula arsip haruslah diaktifkan terlebih dahulu. Untuk keperluan ini fungsi yang digunakan OPEN. Fungsi OPEN adalah membuka arsip beruntun untuk siap dibaca. Pointer pembacaan menunjuk ke rekaman pertama.
Keterangan : namafile adalah nama dari file yang akan dibuka/diaktifkan. mode adalah jenis operasi file yang akan dilakukan terhadap file.
Prosedur OPEN procedure OPEN (input NamaArsip : ArsipBeruntun, Output NamaRek : Rekaman) {Membuka arsip beruntun NamaArsip untuk siap dibaca K.Awal : Sembarang K.Akhir : NamaRek berisi nilai rekaman pertama}
Jenis-jenis operasi file : r : menyatakan file hanya dapat dibaca (file harus sudah ada). w : menyatakan file baru akan dibuat/diciptakan (file yang sudah ada akan dihapus). a : untuk membuka file yang sudah ada dan akan dilakukan proses penambahan data (jika file belum ada, otomatis akan dibuat). r+ : untuk membuka file yang sudah ada dan akan dilakukan proses pembacaan dan penulisan. w+ : untuk membuka file dengan tujuan untuk pembacaan atau penulisan. Jika file sudah ada, isinya akan dihapus. a+ : untuk membuka file, dengan operasi yang akan dilakukan berupa perekaman maupun pembacaan. Jika file sudah ada, isinya akan dihapus.
Contoh: OPEN (MHS, RekMhs){MHS = nama arsip, RekMhs bertipe DataMhs} Bila arsip yang dibuka berisi rekaman seperti contoh di atas, maka kedua perintah OPEN di atas menyebabkan: RekMhs berisi <08053110001, Abdullah, 3.10>
Contoh : pf = fopen(“COBA.TXT”, “w”);
Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
5
procedure READ(input NamaArsip : ArsipBeruntun,output NamaRek : Rekaman) { membaca rekaman yang sekarang sedang ditunjuk oleh pointer pembacaan dari arsip yang bernama NamaArsip. K.Awal : K.Akhir : NamaRek berisi nilai rekaman yang sedang ditunjuk oleh pointer pembacaan. pointer pembacaan menunjuk ke awal rekaman berikutnya.} READ (MHS,RekMhs) Jika pointer pembacaan menunjuk ke awal rekaman kedua dari contoh di atas, maka perintah READ menyebabkan: RekMhs berisi <08053110021,Fidha Rozak,2.87> setelah perintah READ di atas, pointer pembacaan sekarang menunjuk ke awal rekaman ketiga dan siap untuk membaca rekaman ketiga itu. Algoritma dan Pemrograman II
Algoritma dan Pemrograman II
6
3. REWRITE Fungsinya menyiapkan arsip untuk perekaman.
2. READ Fungsinya membaca rekaman yang sekarang sedang ditunjuk oleh pointer pembacaan.
Kamis, 25 Mei 2006
Kamis, 25 Mei 2006
7
procedure REWRITE(input NamaArsip : ArsipBeruntun) { Menyiapkan arsip NamaArsip untuk ditulisi K.Awal : K.Akhir : pointer penulisan menunjuk ke awal arsip NamaArsip, siap untuk menulis rekaman} REWRITE(MHS) Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
8
2
4. WRITE Fungsinya menulis rekaman ke dalam arsip beruntun. procedure WRITE(input NamaArsip : ArsipBeruntun,output NamaRek : Rekaman) { menulis NamaRek ke arsip yang namanya NamaArsip. K.Awal : pointer penulisan sudah berada pada posisi siap merekam K.Akhir : NamaRek tertulis ke dalam arsip NamaArsip. Pointer penulisan maju satu posisi.} WRITE(MHS,<08053110033,'Ariel Peterpan',1.99>) Catatan: Arsip yang dibuka untuk pembacaan (dengan perintah OPEN) tidak dapat digunakan untuk perekaman. Demikian juga sebaliknya, arsip yang dibuka untuk perekaman (dengan perintah REWRITE) tidak dapat dibaca. Operasi baca dan tulis tidak dapat dilakukan sekaligus pada arsip beruntun. Cara mengakhiri arsip dengan MARK: WRITE (MHS,<99999999999,'.',0.00>) Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
9
5. CLOSE Fungsinya menutup arsip yang telah dibuka untuk pembacaan atau dibuka untuk perekaman. procedure CLOSE(input NamaArsip : ArsipBeruntun) { menutup arsip yang telah dibuka. K.Awal : Sembarang K.Akhir : Arsip NamaArsip telah ditutup, tidak dapat diproses lagi.} Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
10
Skema pemrosesan beruntun tanpa penanganan kasus kosong
Skema Pemrosesan Beruntun untuk Arsip beruntun 1. Skema pemrosesan beruntun dengan penanganan kasus kosong
PEMROSESANBERUNTUN2
PEMROSESANBERUNTUN1 KAMUS type Rekaman : record <deklarasi nama field dan tipenya> type ArsipBeruntun : SeqFile of Rekaman and MARK = NamaArsip : ArsipBeruntun NamaRek : Rekaman
KAMUS type Rekaman : record <deklarasi nama field dan tipenya> type ArsipBeruntun : SeqFile of Rekaman and MARK = NamaArsip : ArsipBeruntun NamaRek : Rekaman
ALGORITMA OPEN(NamaArsip, NamaRek) if NamaRek = MARK then output(‘Arsip kosong’) else Inisialisasi repeat Proses(NamaRek) READ(NamaArsip, NamaRek) until NamaRek = MARK Terminasi Endif CLOSE(NamaArsip)
Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
ALGORITMA Inisialisai OPEN(NamaArsip, NamaRek) while (NamaRek ≠ MARK) do Proses(NamaRek) READ(NamaArsip, NamaRek) endwhile Terminasi CLOSE(NamaArsip)
11
Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
12
3
Penggabungan Arsip
Penggabungan dua buah arsip dengan Penyambungan
Penggabungan arsip (merging) dilakukan untuk menggabungkan rekaman yang disimpan di dalam dua buah arsip berbeda. Hasil penggabungan disimpan pada sebuah arsip baru. Penggabungan dapat dilakukan untuk arsip terurut dan arsip belum terurut. Cara penggabungan yang paling sederhana adalah penggabungan yang dilakukan dengan menambah rekaman arsip yang kedua setelah rekaman terakhir arsip pertama.
Misalkan diberikan dua buah arsip bilangan bulat, yang pertama bernama Bil1 dan yang kedua bernama Bil2. Arsip Bil1: 1. 123 23 32 12 213 9999 Arsip Bil2: 2. 45 54 13 9999 Maka arsip Bil3 berisi hasil penyambungan arsip Bil1 dengan arsip Bil2. Rekaman Bil2 ditambahkan setelah rekaman Bil1. Arsip Bil3: 3. 123 23 32 12 213 45 54 13 9999
Kamis, 25 Mei 2006
Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
13
KAMUS type BilBulat : integer type ArispBIL : SeqFile of BilBulat and MARK = <9999> Bil1, Bil2, Bil3 : ArsipBil procedure PenyambunganArsip1 {K.Awal : arsip Bil1 atau Bil2 mungkin kosong K.Akhir: arsip Bil3 berisi hasil penggabungan Bil1 dan Bil2}
Algoritma dan Pemrograman II
14
Algoritma dan Pemrograman II
16
ALGORITMA REWRITE(Bil3) OPEN(Bil1,I) while (I ≠ 9999) do WRITE(Bil3, I) READ(Bil1,I) endwhile OPEN(Bil2,I) while (I ≠ 9999) do WRITE(Bil3, I) READ(Bil2,I) endwhile WRITE(Bil3, <9999>) CLOSE(Bil1) CLOSE(Bil2) CLOSE(Bil3)
KAMUS LOKAL I : BilBulat Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
15
Kamis, 25 Mei 2006
4
Penggabungan Dua Arsip Terurut
Penggabungan arsip secara terurut ada 2 versi:
Misalkan arsip pertama dan arsip kedua sudah terurut menaik dan akan digabungkan juga terurut menaik.
1. Versi AND 2. Versi OR
Arsip Bil1: 1. 12 23 32 123 213 9999 Arsip Bil2: 2. 13 45 54 9999 Arsip Bil3: 3. 12 13 23 32 45 54 123 213 9999 Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
17
Versi AND procedure GabungArsipVersiAND {K.Awal : arsip Bil1 atau Bil2 mungkin kosong. Jika tidak kosong berisi rekaman yang terurut menaik. K.Akhir: arsip Bil3 berisi hasil penggabungan Bil1 dan Bil2 dan rekamannya terurut menaik. Jika kedua arsip masukan kosong, maka arsip Bil3 kosong. } KAMUS LOKAL Angka1, Angka2 : BilBulat
Algoritma dan Pemrograman II
18
while (Angka1 ≠ 9999) AND (Angka2 ≠ 9999) do if (Angka1 ≤ Angka2) then WRITE(Bil3, Angka1) READ(Bil1, Angka1) else WRITE(Bil3, Angka2) READ(Bil2, Angka2) endif endwhile while (Angka1 ≠ 9999) do WRITE(Bil3, Angka1) READ(Bil1, Angka1) endwhile while (Angka2 ≠ 9999) do WRITE(Bil3, Angka2) READ(Bil2, Angka2) endwhile
ALGORITMA OPEN(Bil1, Angka1) OPEN(Bil2, Angka2) REWRITE(Bil3) Kamis, 25 Mei 2006
Kamis, 25 Mei 2006
WRITE( Bil3, <9999>) CLOSE(Bil1) CLOSE(Bil2) CLOSE(Bil3) Algoritma dan Pemrograman II
19
Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
20
5
Versi OR
Pemutakhiran Arsip
procedure GabungArsipVersiAND {K.Awal : arsip Bil1 atau Bil2 mungkin kosong. Jika tidak kosong berisi rekaman yang terurut menaik. K.Akhir: arsip Bil3 berisi hasil penggabungan Bil1 dan Bil2 dan rekamannya terurut menaik. Jika kedua arsip masukan kosong, maka arsip Bil3 kosong. } KAMUS LOKAL Angka1, Angka2 : BilBulat ALGORITMA OPEN(Bil1, Angka1) OPEN(Bil2, Angka2) REWRITE(Bil3) while (Angka1 ≠ 9999) OR (Angka2 ≠ 9999) do if (Angka1 ≤ Angka2) then WRITE(Bil3, Angka1) READ(Bil1, Angka1) else WRITE(Bil3, Angka2) READ(Bil2, Angka2) endif endwhile WRITE( Bil3, <9999>) CLOSE(Bil1) CLOSE(Bil2) CLOSE(Bil3)
Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
21
procedure PemutakhiranArsip { Meremajakan rekaman pada arsip MAST K.Awal : Arsip MAST terdefinisi, terurut menaik. K.Akhir : field dari rekaman tertentu pada arsip MAST dimutakhirkan dan data tetap terurut.}
Algoritma OPEN(MAST, M) if (M = MARK) then output(‘Arsip kosong’) else output(‘Ketikan NIM alamat yang akan diubah’) input(NimB) REWRITE(TEMP) while (M.NIM < NimB) and (M ≠ MARK) do WRITE(TEMP, M) READ(MAST, M) endwhile
Algoritma dan Pemrograman II
Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
22
if (M.NIM = NimB) then output(M.NIM, M.NAMA, M.TGL_LAHIR, M.ALAMAT, M.TELEPON) input(AlamatB) M.ALAMAT ← AlamatB WRITE(TEMP, M) READ(MASK, M) else output(NimB,’ tidak ada pada arsip master’) endif while (M ≠ MARK) do WRITE(TEMP, M) READ(MASK, M) endwhile CLOSE(MASK) CLOSE(TEMP) OPEN(TEMP, M) REWRITE(MAST) while (M ≠ MARK) do WRITE(MASK, M) READ(TEMP, M) endwhile WRITE(MAST, <‘#’, ’#’, ‘#’, ‘#’,’#’>) CLOSE(TEMP) CLOSE(MASTER)
Kamus Lokal M : dataMhs NimB, AlamatB : string
Kamis, 25 Mei 2006
Pemutakhiran (updating) adalah proses yang dilakukan untuk mengubah atau meremajakan rekaman arsip induk (master file). Peremajaan rekaman arsip dapat dilakukan dengan data rekaman yang baru diketik dari papan ketik atau dibaca dari arsip transaksi. Satu rekaman pada arsip yang diremajakan (arsip induk) dapat mengalami beberapa kali perubahan atau peremajaan. Peremajaan langsung dilakukan terhadap arsip master.
23
Kamis, 25 Mei 2006
Algoritma dan Pemrograman II
24
6