Algoritma dan Pemrograman File Sekuensial Oleh: Eddy Prasetyo N 05/05/2014 1
Agenda Definisi Primitif Akses Primitif Penulisan Pemrosesan Arsip Sekuensial Algoritma Konsolidasi 05/05/2014 2
Definisi [1] Sekumpulan rekaman yang dapat diakses secara berurutan mulai dari rekaman pertama sampai dengan rekaman terakhir, rekaman per rekaman secara searah 05/05/2014 3
Definisi [2] Rekaman terakhir adalah fiktif, sebagai penanda akhir dari arsip. Sering disebut dengan EOF (end-of-file) Arsip sekuensial merupakan hasil dari penulisan yang dilakukan rekaman (record) per rekaman 05/05/2014 4
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> 05/05/2014 5
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). 05/05/2014 6
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> } 05/05/2014 7
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 F.S.: Arsip tidak dapat diproses lagi } 05/05/2014 8
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 } 05/05/2014 9
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 : <7473001,'Juliette',95> <8690022,'Laura',80> 05/05/2014 10
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 } Cara mengisi akhir rekaman : WRITE (ArsipMhs, <9999999,'',0>) {Mark} 05/05/2014 11
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 : <'A'> <'0'> <'#'> 05/05/2014 12
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} Cara mengisi akhir rekaman : WRITE (Dokumen, <'#'>) 05/05/2014 13
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> 05/05/2014 14
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 mahasiswa 05/05/2014 15
Contoh Pemrosesan - lanjutan 05/05/2014 16
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); Menutup File nama_var_stream.close(); 05/05/2014 17
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();... Ctt: Dalam Java, saat sebuah file dibuat yang mengacu pada file, bukan berarti sebuah file telah terbuka ijin aksesnya. Ijin akses dibuka jika saat telah dikaitkan dengan sebuah stream 05/05/2014 (FileInputStream ato FileOutputStream) 18
Membuat File dalam JAVA Format: try { new File(nama_file).createNewFile(); }catch(exception e){ } Contoh: try { new File( Latihan.txt ).createnewfile(); }catch(exception e){ } 05/05/2014 19
Contoh Program Buat File import java.io; class File1{ public static void main(string[] args){ try { new File( Latihan.txt ).createnewfile(); }catch(exception e){ } } } 05/05/2014 20
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 ); } } } 05/05/2014 21
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 Dengan separator 05/05/2014 22
Tanpa Separator Artinya kita mengenali adanya kelompok yang lain karena kunci berubah 05/05/2014 23
Tanpa kasus kosong 05/05/2014 24
Tanpa kasus kosong- lanj 05/05/2014 25
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 05/05/2014 26
Contoh -lanj 05/05/2014 27
Contoh -lanj 05/05/2014 28
Dengan kasus kosong 05/05/2014 29
Dengan kasus kosong-lanj 05/05/2014 30
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. 05/05/2014 31
Contoh -lanj 05/05/2014 32
Contoh -lanj 05/05/2014 33
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" 05/05/2014 34
Algoritma konsolidasi 05/05/2014 35
Algoritma konsolidasi -lanj 05/05/2014 36
Contoh Diberikan sebuah arsip teks yang dapat diakses sequential huruf per huruf. Hendak dihitung kata yang terpanjang dalam teks tersebut. Diandaikan bahwa teks hanya mengandung huruf dan "blank". Kata adalah sekumpulan huruf yang dipisahkan oleh satu atau beberapa blank. 05/05/2014 37
Contoh -lanj 05/05/2014 38
Contoh -lanj 05/05/2014 39