CS1023 Pemrograman Komputer Lecture 23 Sequential File [1]
Agenda Definisi Primitif Akses Primitif Penulisan Pemrosesan Arsip Sekuensial Algoritma Konsolidasi
Definisi File Sequensial Sekumpulan rekaman yang dapat diakses secara berurutan mulai dari rekaman pertama sampai dengan rekaman terakhir Akses dilakukan rekaman demi rekaman secara searah 1 2 3 4 5 EOF Ani 111 Budi 112 Ida 113 Ali 114 Rudi 115 Rek1 Rek2 Rek3 Rek4 Rek5 Mark
Keterangan Rekaman terakhir adalah fiktif, sebagai penanda akhir dari arsip, yang sering disebut dengan EOF (end-of-file). Setiap rekaman berisi type dasar atau bentukan yang telah didefinisikan, dan bertipe sama. Arsip sekuensial merupakan hasil dari penulisan yang dilakukan rekaman (record) per rekaman.
Deklarasi File Elemen dalam rekaman disebut field. Cara mendefinisikan file : type rekaman : <…….> namaArsip : SEQFILE of (*) <nama_rek> : rekaman (1) <mark>
Cara Akses Setiap rekaman dapat diakses secara berurutan Akses terdiri dari pembacaan atau penulisan. Perekaman (recording) dapat dilakukan melalui primitif penulisan Pada satu saat, akses pada arsip sekuensial hanya dapat dilakukan satu modus operasi: diakses/dibaca atau ditulis.
Primitif Akses [1] ASSIGN : merefer ke nama file fisik Procedure ASSIGN (Input NamaArsip, NamaFisik) { Arsip sekuensial dengan nama NamaArsip merefer ke file fisik dengan nama NamaFisik I.S. : sembarang F.S.: Arsip dengan NamaArsip pada program siap dipakai } Contoh : F1 adalah variabel untuk file …………………….. Assign ( F1, ‘C:\Coba1.txt’) ……………………
Primitif Akses [2] RESET : membuka file untuk dibaca Procedure Reset (Input NamaArsip) { I.S. : sembarang F.S.: Arsip dengan NamaArsip pada program siap dibaca. } Contoh : F1 adalah variabel untuk file …………………….. Assign ( F1, ‘C:\Coba1.txt’) Reset (F1) ……………………
Primitif Akses [3] APPEND: membuka file untuk ditulis / ditambah Procedure Append (Input NamaArsip) { I.S. : sembarang F.S.: Arsip NamaArsip pada program siap ditambah. } Contoh : F1 adalah variabel untuk file …………………….. Assign ( F1, ‘C:\Coba1.txt’) Append (F1) ……………………
Primitif Akses [4] REWRITE: membuat file baru Procedure Rewrite (Input NamaArsip) { I.S. : sembarang F.S.: Dibuat arsip baru dengan NamaArsip, dan siap ditulis. } Contoh : F1 adalah variabel untuk file …………………….. Assign ( F1, ‘C:\Coba1.txt’) Rewrite (F1) ……………………
Primitif Akses [5] CLOSE: menutup & menyimpan perubahan file Procedure Close (Input NamaArsip) { I.S. : sembarang F.S.: Menyimpan file secara permanen ke media penyimpan } Contoh : F1 adalah variabel untuk file …………………….. Assign ( F1, ‘C:\Coba1.txt’) Close (F1) ……………………
Primitif Akses [6] WRITE: menulis data ke file Procedure Write (Input NamaArsip, Rekaman) { I.S. : sembarang F.S.: Menulis Rekaman ke file } Contoh : F1 adalah variabel untuk file Assign ( F1, ‘C:\Coba1.txt’) Rewrite(F1) Write(F1,Mhs1)
Primitif Akses [7] READ: membaca data dari file Procedure Read (Input NamaArsip, Rekaman) { I.S. : sembarang, file dalam keadaan terbuka F.S.: membaca data dan menyimpan ke variabel Rekaman. } Contoh : F1 adalah variabel untuk file Assign ( F1, ‘C:\Coba1.txt’) Reset(F1) Read(F1,Str1)
Primitif Akses [8] RENAME: mengganti nama Procedure Rename (Input NamaArsip, StringNama) { I.S. : file dalam keadaan tertutup / closed. F.S.: mengganti nama file fisik menjadi StringNama. } Contoh : F1 adalah variabel untuk file Assign ( F1, ‘C:\Coba1.txt’) ……………….. Close(F1) Rename (F1,’C:\Asli.txt’)
Primitif Akses [9] ERASE: menghapus file fisik dari media Procedure Erase (Input NamaFisik) { I.S. : file dalam keadaan tertutup / closed. F.S.: menghilangkan file dengan nama NamaFisik. } Contoh : F1 adalah variabel untuk file Assign ( F1, ‘C:\Coba1.txt’) ……………….. Close(F1) Erase (F1)
Pemrosesan Arsip Sekuensial Jika setiap rekaman harus diproses dengan cara sama, pemrosesan arsip sekuensial dapat dilakukan dengan memakai skema pemrosesan sekuensial dengan mark. Contoh1: sebuah arsip sekuensial 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 dengan MARK, jika i adalah deret yang diproses, i berharga 1,2,3..N EOP adalah NIM=9999999 First_Elmt : Reset(ArsipMhs) Read(ArsipMhs, RekMhs ) Next_Elmt : READ(ArsipMhs, RekMhs) Proses : membaca arsip sambil menghitung nilai rata-rata mahasiswa
Contoh Pembacaan – lanj. Program Rata2 Kamus type rekaman : <NIM : integer, nilai : integer [0..100]> ArsipMhs :SEQFILE of (*) Rek : rekaman (1) <9999999,0> Sumnil, JumMhs : integer Algoritma Assign(ArsipMhs,’C:\Coba.txt’) Reset(ArsipMhs) Read(ArsipMhs, Rek) if Rek.NIM=9999999 then Output(‘Arsip kosong’) else { Lanjutkan ke hal berikut }
Contoh Pembacaan – lanj. {Else} SumNil 0; JumMhs 0 Repeat SumNil SumNil + Rek.Nilai JumMhs JumMhs + 1 Read(ArsipMhs,Rek) Until (Rek.NIM=9999999) Output (SumNil / JumMhs) Close(ArsipMhs)
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
Tanpa Separator Antar kelompok dibedakan dengan adanya perbedaan kunci Klas1 Ani 111 Klas1 Budi 112 Klas1 Ida 113 Klas2 Rudi 114 Klas2 Ina 115 Klas3 Andi 116 Klas3 Ita 117 Klas3 Didi 118 Kelompok Klas1 Kelompok Klas2 Kelompok Klas3 Arah Pemrosesan
Program Konsolidasi1 { Tanpa kasus penangananan kosong} { Input : arsip sequensial terurut } { Proses : memproses per kelompok} { output : hasil proses } Kamus type rekaman : <Kelompok : type, lainnya : type> Arsip :SEQFILE of (*) Rek : rekaman (1) <mark,nilailain> EOP : boolean { true jika mark } procedure Inisialisasi_File { inisialisasi seluruh file } procedure Terminasi_File {Terminasi seluruh file } Katageri : type { sesuai tipe Kelompok } procedure proses_Elemen_I { Proses awal suatu kelompok } procedure Init_Kelompoki { Inisialisasi_Kelompok} procedure proses_kelompok { memproses suatu kelompok } procedure Terminasi_kelompok {Terminasi suatu kelompok}
Tanpa kasus kosong- lanj Algoritma Inisialisasi_File Read(Arsip, Rek) While not EOP do Init_Kelompok Kategori Rek.Kelompok Repeat Proses_kelompok Until ( kategori Rek.Kelompok ) Terminasi_kelompok Terminasi_File
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 -lanj Program Nilai { Tanpa kasus penangananan kosong} { Input : arsip sequensial berisi NIM dan Nilai } { Proses : menghitung nilai rata-rata} { output : NIm dan nilai tiap mahasiswa} Kamus type rekaman : <NIM : integer, Nilai : integer [0..100]> Arsip :SEQFILE of (*) RekMhs : rekaman (1) <9999999,0> KelNIM : integer { Kelompok NIM yang diproses } SumNil : integer { Total nilai tiap NIM } NKuliah : integer { cacah matakuliah }
Contoh -lanj Algoritma Assign(Arsip,’C:\Coba.txt’) Reset(Arsip) Read(Arsip, Rek) While not (Rek.NIM 9999999) do SumNil 0; NKuliah 0 KelNIM Rek.NIM Repeat SumNil Sumnil+Rek.Nilai NKuliah NKuliah + 1 Until ( KelNIM Rek.NIM ) Output(KelNIM,SumNil/NKuliah) Close(Arsip)
Dengan kasus kosong Dapat menangani kasus kosong Dilakukan dengan memberikan mekanisme untuk menyaring kasus kosong dan memberikan instruksi jika terjadi kasus kosong Model dengan mark : If (Kelompok = mark ) then Penanganan_kasus_kosong
Dengan Separator Ada data yang memisah antar kelompok Dibuat fungsi Separator(Kelompok), yang akan membuang data separator/pemisah. Misal : data kosong Klas1 Ani 111 Klas1 Budi 112 Klas2 Rudi 114 Klas3 Andi 116 Klas3 Ita 117 Klas3 Didi 118 Separator Separator
Algoritma konsolidasi -lanj Inisialisasi_File Read(Arsip, Rek) If EOP then Penanganan_kasus_kosong else Repeat While not EOP and Separator(Kelompok) do Read(Arsip,Rek) Init_Kelompok While not EOP and not Separator(kelompok) do Proses_Kelompok Terminasi_kelompok Until Rek.Kunci=mark Terminasi_File Close(Arsip)
Contoh Diberikan sebuah arsip teks yang dapat diakses sequential huruf per huruf. Hendak dihitung jumlah huruf pada kata yang terpanjang dalam teks tersebut. Diandaikan bahwa teks hanya mengandung huruf dan spasi. Kata adalah sekumpulan huruf yang dipisahkan oleh satu atau beberapa blank.
Proses Pembuatan Algoritma Diberikan sebuah arsip teks yang dapat diakses sequential huruf per huruf. Buat seqfile dg tipe elemen : karakter Hendak dihitung jumlah huruf pada kata yang terpanjang dalam teks tersebut. Buat variabel untuk jumlah huruf & panjang kata maksimum Kata adalah sekumpulan huruf yang dipisahkan oleh satu atau beberapa blank. Teks diakhiri titik. Separator : spasi Mark : Titik
Contoh -lanj Program JmlHuruf { Menghitung jumlah huruf pd kata terpanjang } Kamus type rekaman : <Karakter : character > Arsip :SEQFILE of (*) Rek : rekaman (1) <‘.’> constant spasi:character = ‘ ‘ JChar : integer { Jumlah karaker pd kata } KataMax : integer { Jumlah huruf pd kata terpanjang }
Algoritma Assign(Arsip,’C:\Coba.txt’) Reset(Arsip) Read(Arsip, Karakter) If ( Karakter = ‘.’ ) then Output( ‘Arsip kosong’) else Katamax 0 Repeat while (karakter ‘.’) and (Karakter=blank) do JChar 0; while (Karakter’.’) and (Karakterb;ank) do JChar JChar + 1 if Katamax < JChar then Katamax JChar Until ( Karakter = ‘.’) Output(Katamax) Close(Arsip)
latihan Pada file text, cari kata yang memiliki huruf A. Cari juga kata terpanjang yang memiliki huruf A. Cari juga kata yang memiliki huruf A terbanyak. Tampilkan maing-masing kata tersebut. Pada file arsip nilai mhs, cari nilai yang paling besar untuk tiap mahasiswa dan nilai terbesar untuk seluruh mahasiswa. Tampilkan NIM mhs tersebut. Jika ada 10 mahasiswa, tampilkan 3 nilai rata-rata terbaik.