Anda di halaman 1dari 29

CS1023

CS1023 Pemrograman
Pemrograman
Komputer
Komputer

Lecture 23
File Text dan Sequensial
Agenda
• Definisi File
• Primitif Akses
• Primitif Penulisan
• Pemrosesan Arsip Sekuensial
• Algoritma Konsolidasi
File Text
• File : tempat menyimpan data secara
permanen / tetap
• File dapat berisi data text atau record /
struktur
• File text dapat ditulis dan dibaca dengan
editor text
• File sequensial ditulis dan dibaca dengan
program
File Text
• File text diakses dengan urutan sebagai berikut :
– Deklarasi nama pointer file
FILE *varfile
– Buka file dengan perintah fopen()
varfile=fopen(“namafile.txt”,”mode”)
– Mode adalah :
• “r” : untuk pembacaan file
• “w” : untuk menulis file, file lama dihapus
• “a” : untuk menulis file dengan menambah data
• “r+” : membaca dan menulis file
• “w+” : membaca dan menulis data, file lama dihapus
File Text
• Proses berikutnya : Menulis data
– Menulis karakter ke file
fputc( ‘karakter’, varfile)
– Menulis string
fputs(“string”, varfile)
fprintf(varfile, “string”,variabel)
Misal :
FILE *fp; char str1[15]=“Telkom Univ”;
fp=fopen(“C:\\test.txt”,”w”);
fputs(“Ini string1”, fp);
fprintf(fp, “Mahasiswa %s”,str1);
File Text
• Proses berikutnya : Membaca data
– Menbaca karakter
fgetc( varfile,&varchar)
– Membaca string
fscanf(varfile, "%s", &varsimpan)
fgets(varsimpan, panjang, (FILE*)varfile);
Misal :
FILE *fp; char str1[15];
fp=fopen(“C:\\test.txt”,”r”);
fscanf(fp,”%s”,&str1);
fgets(str1,255,(FILE *)fp);
File Text
• Fungsi lain :
– Akhir dari file
feof(varfile)
– Menutup file
fclose(varfile)
Misal :
FILE *fp; char str1[15];
fp=fopen(“C:\\test.txt”,”w”);
while ( !feof(fp))
fgets(str1,255,(FILE *)fp);
fclose(fp);
Definisi File Sequensial
• Sekumpulan rekaman/struktur 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 Budi Ida Ali Rudi
111 112 113 114 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
• Cara membuka file sama seperti file text
• Perintah yang membedakan :
– Menulis data
fwrite( varpointer,panjang,jumlah,varfile)
fwrite(&data,sizeof(data),1,fp);

– Membaca data
fread( varpointer,panjang,jumlah,varfile)
fread(&data,sizeof(data),1,fp);
Contoh Menulis dan membaca
FILE *fp;
struct mahasiswa{
int nim;
char nama[25];
} mhs[10], data,data1;
fp = fopen("test1.txt", "w");
data.nim=111; strcpy(data.nama,"Asep S”);
fwrite(&data,sizeof(data),1,fp);
fflush(fp);
Contoh Menulis dan membaca[2]
fp=fopen("test1.txt","r");
fread(&data1,sizeof(data1),1,fp);
printf("%d %s\n",data1.nim,data1.nama);
fclose(fp);
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 Klas1 Klas1 Klas2 Klas2 Klas3 Klas3 Klas3


Ani Budi Ida Rudi Ina Andi Ita Didi
111 112 113 114 115 116 117 118

Kelompok Kelompok Kelompok


Klas1 Klas2 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
Read(Arsip, Rek)
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 (Rek.NIM !=9999999) {
SumNil  0; NKuliah  0
KelNIM  Rek.NIM
Repeat
SumNil  Sumnil+Rek.Nilai
NKuliah  NKuliah + 1
Read(Arsip, Rek)
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 Klas1 Klas2 Klas3 Klas3 Klas3


Ani Budi Rudi Andi Ita Didi
111 112 114 116 117 118

Separator Separator
Algoritma konsolidasi -lanj
Algoritma
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
Read(Arsip, Rek)
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
Read(Arsip, Karakter)
JChar  0;
while (Karakter’.’) and (Karakterb;ank) do
JChar  JChar + 1
Read(Arsip, Karakter)
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.
LATIHAN DI KELAS
• Buat program untuk mengisi file dari data
3 oarng teman anda. Datanya adalah nama,
nim dan nilai. Tulis ke dalam file, kemudian
baca file tersebut dan tampilkan.
• Buat program untuk mengisi file dari data
3 oarng teman anda. Datanya adalah nama,
nim dan nilai. Tulis ke dalam file, kemudian
baca file tersebut dan hitung rata-rata
nilai. Tampilkan isi file dan rata-rata nilai.
LATIHAN Konsolidasi
• Buat program untuk mengisi file dari data 3 orang teman
anda. Datanya adalah nama, MK dan nilai, dalam bentuk
struktur. Mhs 1 memiliki 3 data Mk dan nilai berbeda,
Mhs2 ada 2 data berbeda, dan Mhs3 memiliki 4 data
berbeda. Data dimasukkan dalam keadaan tidak terurut
nim.
• Tulis ke dalam file, kemudian baca file tersebut dan
simpan dalam array Mhs .
• Hitung rata-rata nilai tiap mahasiswa.
• Petunjuk : untuk mengkondosildasikan nim, maka data
diurutkan berdasarkan nim, sehingga data akan
berkempok. Kemudian dapat dilakukan perhitungan nilai
rata-rata tiap mahasiswa. Data nim tidak boleh dituliskan
dalam program. Tampilkan rata-rata nilai tiap nim.

Anda mungkin juga menyukai