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
– 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.
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
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 (Karakterb;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.