Algoritma dan Pemrograman
File Sekuensial
Oleh:
Eddy Prasetyo N
Agenda
Definisi
Primitif Akses
Primitif Penulisan
Pemrosesan Arsip Sekuensial
Definisi [1]
Sekumpulan rekaman yang dapat diakses
secara berurutan mulai dari rekaman pertama
sampai dengan rekaman terakhir, rekaman per
rekaman secara searah
Definisi [2]
Rekaman terakhir adalah fiktif, sebagai penanda
akhir dari arsip.
Sering disebut dengan EOF (end-of-file)
Arsip sekuensial merupakan hasil dari penulisan
Definisi [3]
Setiap rekaman boleh berisi type dasar ataupun
terstruktur yang telah didefinisikan, setiap
rekaman berstruktur sama
Elemen dalam rekaman disebut field.
Cara Pendefinisian:
type rekaman
: <…….> sebuah type terdefinisi untuk setiap rekaman
namaArsip : SEQFILE of
(*) <nama_rek> : rekaman
(1) <mark>
Definisi [4]
Setiap rekaman dapat diakses dan dibaca secara
berurut primitif akses
Perekaman (recording) dapat dilakukan melalui
primitif penulisan
Catatan: pada suatu arsip sekuensial hanya dapat
dilakukan satu modus operasi: diakses/dibaca atau
ditulis (pada saat bersamaan).
Primitif Akses [1]
ASSIGN
Procedure ASSIGN (Input NamaArsip, NamaFisik) {
Arsip sekuensial yang namanya dikenal di dalam program sebagai NamaArsip, secara fisik diberi nama NamaFisik
I.S. : sembarang
F.S.: Arsip dengan NamaArsip pada program siap dipakai }
OPEN
Procedure OPEN (Input NamaArsip, <rekaman>) {
Arsip sekuensial siap dibaca. Rekaman pertama yang informasinya ada pada <rekaman> dapat diakses I.S. : sembarang
F.S.: informasi pada rekaman pertama siap diakses, dengan mengacu kepada <rekaman> }
Primitif Akses [2]
READ
Procedure READ (Input NamaArsip, NamaFisik) {
Rekaman sesudah rekaman saat ini(current) yang dapat diakses
I.S. : <rekaman> bukan merupakan mark, sebut sebagai current_rekaman
F.S.: Arsip dimajukan satu rekaman, <rekaman > berisi informasi yang disimpan pada rekaman Sesudah current_rekaman. Mungkin <rekaman> yang baru adalah mark
}
CLOSE
Procedure CLOSE (Input NamaArsip) {
Arsip sekuensial ditutup, tidak dapat diakses maupun ditulisi lagi I.S. : sembarang
Primitif Penulisan
REWRITE
Procedure REWRITE (Input/Output NamaArsip) {
Arsip sekuensial siap untuk direkam I.S. : sembarang
F.S.: Arsip sekuensial yang bernama NamaArsip siap untuk direkam pada posisi pertamanya }
WRITE
Procedure WRITE (Input NamaArsip, <rekaman>) {
Data pada <rekaman> direkam pada posisi aktual arsip. Kemudian posisi dimajukan satu. I.S. : arsip sekuensial berada pada posisi yang telah siap menerima rekaman,
<rekaman> bukan merupakan mark
F.S.: <rekaman> direkam pada posisi yang telah disiapkan, arsip dmajukan satu posisi
Jika <rekaman> yang diisikan ke arsip adalah elemen fiktif yang dimaksudkan sebagai mark, maka arsip tidak dapat ditulisi lagi
Contoh [1]
Sebuah arsip sekuensial berisi data mahasiswa, yang setiap
rekamannya memuat data NIM, Nama dan Nilai akhir mahasiswa.
type rekaman : < NIM:integer, Nama : string, Nilai :integer [0..100]>
ArsipMhs : SEQFILE of
(*) RekMhs : rekaman
(1) <999999, '',0>
Domain setiap rekaman : sesuai dengan domain masing-masing
rekaman
Konstanta : sebuah rekaman, misalnya :
Contoh [1] - lanjutan
Cara akses rekaman pertama : OPEN (ArsipMhs, RekMhs)
Cara akses
: { NIM ≠ 9999999 } READ (ArsipMhs, RekMhs )
Cara menyiapkan untuk direkam : REWRITE (ArsipMhs)
Cara mengisi : WRITE (ArsipMhs, RekMhs ) {Harga Current }
WRITE(ArsipMhs, <7473002,'Davy Rindt',96>) { konstanta }
WRITE(ArsipMhs, Rek1) { Rek1 bertype rekaman }
Contoh [2]
Sebuah arsip sekuensial berisi teks, maka setiap rekamannya
adalah satu karakter.
Misalnya MARK adalah ' #'
type rekaman : character
Dokumen :SEQFILE of
(*) CC : rekaman
(1) <'#'>
Domain setiap rekaman : character
Konstanta : sebuah rekaman, misalnya :
Contoh [2] - lanjutan
Cara akses rekaman pertama : OPEN (Dokumen, CC)
Cara akses
: { CC ≠ '#' } READ (Dokumen, CC)
Cara menyiapkan untuk direkam : REWRITE (Dokumen)
Cara mengisi : WRITE (Dokumen, CC) {Harga Current }
WRITE (Dokumen, <'A'>) { konstanta }
WRITE (Dokumen, Kar) {dari nama lain, Kar bertype rekaman}
Pemrosesan Arsip Sekuensial
Jika setiap rekaman harus diproses dengan cara sama,
pemrosesan arsip sekuensial dapat dilakukan dengan
memakai skema pemrosesan sekuensial dengan mark.
Contoh1:
Dibaca sebuah arsip sekuensial bernama
type rekaman : < NIM : integer, ,nilai:integer [0..100] >
ArsipMhs: SEQFILE of
(*) RekMhs : rekaman
(1) <9999999, 99>
Contoh Pemrosesan
Analisa : pemrosesan sekuensial dari elemen arsip
sekuensial
Model tanpa MARK, jika i adalah deret yang diproses, i
berharga 1,2,3..N
EOP adalah NIM=9999999
First_Elmt : OPEN(ArsipMhs, RekMhs )
Next_Elmt : READ(ArsipMhs, RekMhs)
Proses : membaca arsip sambil menghitung nilai rata-rata
Pemrosesan File di Java
Membuka File (izin Akses File)
File nama_var_file;
nama_var_file = new File(path&nama_file);
Memproses File (Baca/Tulis File)
Baca File
InputStream nama_var_stream = new
FileInputStream(nama_var_file);
Tulis File
OutputStream nama_var_stream = new
FileOutputStream(nama_var_file);
Contoh di Java:
...
File Mahasiswa;
Mahasiswa= new File(“C:\Latihan.txt”);
//Baca file
InputStream fs = new FileInputStream(Mahasiswa);
//Tulis File
OutputStream fs = new FileOutputStream(Mahasiswa);
//Tutup File
fs.close();
...
Membuat File dalam JAVA
Format:
try { new File(nama_file).createNewFile();
}catch(Exception e){
}
Contoh:
try { new File(“Latihan.txt”).createNewFile();
}catch(Exception e){
Contoh Program Buat File
import java.io;
class File1{
public static void main(String[] args){
try { new File(“Latihan.txt”).createNewFile();
}catch(Exception e){
}
}
Mendeteksi Keberadaan File
import.java.io;
Class File2{
public static void main(String[] args){
File file_cek;
file_cek = new File(“Latihan.txt”);
if(file_cek.exists()){
System.out.println(“file Latihan.txt sudah ada”);
}else{
System.out.println(“file Latihan.txt belum ada”);
}
Algoritma Konsolidasi
Didefinisikan sebuah sequential file yang terurut,
arsip tersebut mengandung kelompok-kelompok
data dengan kunci sama yang harus diproses
sebagai satu kesatuan.
Ada dua model arsip semacam ini :
Tanpa separator
Tanpa Separator
Artinya kita mengenali adanya kelompok yang lain karena
Contoh
Diketahui sebuah arsip nilai mahasiswa,
Satu mahasiswa dapat mempunyai beberapa buah nilai
(karena dalam satu semester mengambil beberapa
matakuliah dan setiap mahasiswa tidak sama
matakuliahnya).
Buat algoritma untuk menghitung nilai rata-rata setiap
mahasiswa, dan membuat daftar nilai sederhana, yaitu
menuliskan NIM dan nilai rata-rata setiap mahasiswa
Contoh
Diketahui sebuah arsip nilai mahasiswa,
Satu mahasiswa dapat mempunyai beberapa buah nilai (karena
dalam satu semester mengambil beberapa matakuliah dan setiap
mahasiswa tidak sama matakuliahnya).
Buat algoritma untuk menghitung nilai rata-rata setiap mahasiswa,
dan membuat daftar nilai sederhana, yaitu menuliskan NIM dan
nilai rata-rata setiap mahasiswa.
Selain itu diminta Nilai rata-rata seluruh
mahasiswa, jumlah nilai rata-rata setiap mahasiswa dibagi jumlah
mahasiswa.
Dengan Separator
Artinya ada rekaman tertentu yang memisahkan satu kelompok
dan kelompok lainnya. Separator ini boleh satu rekaman atau lebih
dari satu rekaman. Pada contoh berikut, separator adalah "kartu
putih"
Contoh
Diberikan sebuah arsip teks yang dapat diakses sequential
huruf per huruf.