File Eksternal (dalam Bahasa Pasc Pascal) al) Tim Pe Peny nyusun usun Mat Materi eri KU107 KU 1072/P 2/Peng engena enalan lan Tekn eknolo ologi gi Inf Inform ormasi asi B
KU1072/Pengenalan Teknologi Informasi B Taha ahap p Tahu ahun n Pe Perta rtama ma Ber Bersam sama a Institut Teknologi Bandung
Tujuan •
•
•
Mahasi Maha sisw swa a mema memaha hami mi kegun egunaa aan n file file seba sebag gai sar sarana ana penyimp penyimpanan anan data data eksternal eksternal Mahasi Maha sisw swa a mema memaha hami mi prim primit itif if-p -pri rimi miti tiff dasa dasarr dala dalam m pemro pemroses sesan an file file dalam dalam Pascal ascal Mahasi Maha sisw swa a mema memaha hami mi skem skemaa-sk skem ema a dasa dasarr pemr pemros oses esan an seku sekuen ensi sial al untu untuk k pemb pembac acaa aan n dan dan penul penulisa isan n file file
10/27/2015
KU1072/Pengantar Teknologi Informasi B
2
Pendahuluan •
Input/ Input/Ou Outpu tputt melalu melaluii I/O devic device: e: –
•
•
Flow chara character cter antar antara a progra program m dengan dengan I/O device device : •
Contoh input device: device: keyboard keyboard
•
Contoh output device: device: monitor/layar monitor/layar
I/O melal melalui ui device device bersif bersifat at sement sementara ara:: begitu begitu prog progrram mati mati maka maka data data/n /nil ilai ai akan akan hila hilang ng Variable ariable dalam progra program m dapat dapat menyimp menyimpan an data/ni data/nilai, lai, tapi bersif bersifat at sementar sementara a begitu begitu progr program am mati mati mak maka nila nilaii yang ang ter tersimp simpan an akan akan hila hilang ng
10/27/2015
KU1072/Pengantar Teknologi Informasi B
3
Pendahuluan Program TulisNama; { Membaca nama dari keyboard dan menuliskan ke layar } { KAMUS } var nama nama : str strin ing; g;
Contoh Variable
Contoh Input melalui melalui keyboar keyboard d
{ ALGORITMA } begin write( write('Tu 'Tulis liskan kan nama: nama: ');
Contoh Output melalu melaluii monito monitorr
readln(nama); writel writeln(' n('Nam Namamu amu adalah adalah: : ', nama); nama); end. 10/27/2015
KU1072/Pengantar Teknologi Informasi B
4
Pendahuluan •
Pada banyak kasus dibutuhkan agar nilai input/output atau nilai variabel disimpan sehingga masih dapat dipakai walaupun program selesai –
•
Untuk itu digunakan file [eksternal]
File: –
Bentuk penyimpanan eksternal dalam suatu media penyimpanan, misalnya harddisk bentuk penyimpanan sementara (untuk data variable dan I/O) adalah memory
10/27/2015
KU1072/Pengantar Teknologi Informasi B
5
File Teks dan File Biner •
File Teks: –
–
–
•
File yang isinya bisa dibaca dan dibuat langsung dengan menggunakan editor teks biasa Contoh editor teks biasa: notepad, wordpad Digunakan untuk data bertype character text
File biner (binary file): –
–
–
File yang memiliki format khusus yang hanya bisa dibaca dengan program khusus Contoh: Coba buka file *.pdf dengan editor teks biasa. Apa yang terlihat? Digunakan untuk data bertype selain character: file of integer, file of real
10/27/2015
KU1072/Pengantar Teknologi Informasi B
6
Nama Fisik vs Nama Lojik •
Dalam program setiap file mempunyai 2 nama: –
–
Nama fisik : nama file dalam media penyimpanan Contoh: myfile.txt, mydata.dat Nama Lojik : nama variabel yang digunakan untuk menggantikan nama fisik file dalam program
10/27/2015
KU1072/Pengantar Teknologi Informasi B
7
Read/Write File
nama fisik
Program infile.dat
outfile.dat
Read file (input)
Write file (output)
inf : file of integer; assign(inf,’infile.dat’)
outf : file of integer; assign(outf,’outfile.dat’)
Harddisk nama lojik 10/27/2015
KU1072/Pengantar Teknologi Informasi B
8
Contoh Program ContohFile; { Membaca dan menulis file } { KAMUS } var inf : file of integer; outf : file of integer; { ALGORITMA } begin assign(inf, ‘infile.dat’); reset(inf); ... assign(outf, ‘outfile.dat’); rewrite(outf); ... close(inf); close(outf); end. 10/27/2015
Contoh Variable untuk membaca input dari file
Contoh Variable untuk menuliskan output ke file
Membuka file untuk membaca input dari file infile.dat Membuka file untuk menuliskan output ke file outfile.dat Menutup file
KU1072/Pengantar Teknologi Informasi B
9
Pemrosesan File Secara Umum Buka File
Baca Isi File
Membaca Isi File
File Input
Tutup File
Pemrosesan Isi file
Buka File
Tulis Isi File
10/27/2015
Tutup File
Menulis Isi File
KU1072/Pengantar Teknologi Informasi B
File Input
10
Pemrosesan File •
•
Assign nama fisik ke nama lojik Membuka file –
–
•
•
•
•
Membuka file untuk membaca isinya (read only) Membuka file untuk menulis isinya (rewrite)
Membaca isi file Menulis isi file Menutup file End of File (EOF) 10/27/2015
KU1072/Pengantar Teknologi Informasi B
11
Assign Nama Fisik ke Nama Lojik •
Meng-assign nama file fisik (nama di penyimpanan) ke nama lojik (nama variabel)
{ KAMUS } FILE_NAME : string; fin : file of integer; { tergantung type file } { ALGORITMA } begin FILE_NAME := ‘infile.dat’; assign(fin, FILE_NAME); { assign variable fin ke file dg nama sesuai FILE_NAME } ... end. 10/27/2015
KU1072/Pengantar Teknologi Informasi B
12
Membuka File untuk Membaca Isinya • •
Mempersiapkan file untuk dibaca (read-only ) Input dari file ke program
{ KAMUS } fin : text; { tergantung type file } { ALGORITMA } begin assign(fin, ‘infile.txt’); reset(fin); { menyiapkan file untuk dibaca } ... end.
10/27/2015
KU1072/Pengantar Teknologi Informasi B
13
Membuka File untuk Menulis Isi File • •
Output dari program ke file Mempersiapkan file untuk siap ditulis (rewrite) – –
Jika file fisik belum ada, file di-create Jika file tidak kosong, maka isi yang lama dihapus dan akan ditimpa dengan isi yang baru
{ KAMUS } fout : text; { tergantung type file } { ALGORITMA } begin assign(fout, ‘outfile.txt’); rewrite(fout); { menyiapkan file untuk ditulis } ... end. 10/27/2015
KU1072/Pengantar Teknologi Informasi B
14
Membaca Isi File •
Membaca data dalam file dan menampung isinya ke suatu variable –
Hati-hati dengan deklarasi variable type harus sesuai dengan isi file
{ KAMUS } fin : text; { tergantung type file } c1, c2, c3 : char; { ALGORITMA } begin assign(fin, ‘infile.txt’); reset(fin); read(fin,c1); { c1 = ‘H’ } read(fin,c2); { c2 = ‘e’ } read(fin,c3); { c3 = ‘l’ } ... 10/27/2015 KU1072/Pengantar Teknologi Informasi B end.
infile.txt Hello
15
Menulis File •
Menulis nilai-nilai ke dalam file
{ KAMUS } fout : file of integer; { tergantung type file } i1, i2, i3 : integer; outfile.dat { ALGORITMA } begin assign(fout, ‘outfile.dat’); rewrite(fout);
45 34
cek manual isi outfile.dat (apakah bisa dibaca?)
write(fout,11); write(fout,45); write(fout,34); ... end. 10/27/2015
11
KU1072/Pengantar Teknologi Informasi B
16
Menutup File •
Menutup file: file tidak dapat dibaca/ditulis lagi
•
Jika membuka harus menutup!! { KAMUS } fint : file of integer; { ALGORITMA } begin assign(fint, ‘fileint.dat’); reset(fint); ... close(fint);
Biasakan selalu menulis close segera setelah menulis open!! Kode lain sisipkan di antaranya
end.
10/27/2015
KU1072/Pengantar Teknologi Informasi B
17
End of File (EOF) •
Sebuah fungsi yang digunakan untuk menyatakan bahwa pembacaan isi file sudah mencapai akhir file lihat kegunaannya pada pembahasan berikutnya { KAMUS } ftxt : text; { ALGORITMA } begin assign(ftxt, ‘filetxt.txt’); reset(ftxt);
eof berarti sudah berada di akhir file (artinya sudah tidak ada yang bisa dibaca dari file)
if (EOF(ftxt)) then begin writeln(‘File kosong’); end else ... end. 10/27/2015
KU1072/Pengantar Teknologi Informasi B
18
PEMROSESAN FILE SECARA SEKUENSIAL 10/27/2015
KU1072/Pengantar Teknologi Informasi B
19
File Sekuensial •
•
•
File yang dibaca secara sekuensial dari awal sampai akhir: –
Tidak ada akses di tengah file
–
Akses hanya bisa maju, tidak bisa mundur, atau lompat
Untuk itu file harus diproses juga secara sekuensial Data yang tersimpan dalam file memiliki type yang sama: text, file of integer, file of real , dll.
10/27/2015
KU1072/Pengantar Teknologi Informasi B
20
Membaca data secara sekuensial hingga akhir file •
Pada banyak kasus, program diharapkan membaca data secara sekuensial sampai akhir file, contoh: –
–
–
•
File berisi nilai mahasiswa satu kelas (skala 0 s.d. 100). harus dihitung rata-rata nilai mahasiswa File berisi luas wilayah setiap kecamatan suatu kabupaten. harus dihitung total wilayah kecamatan untuk mendapatkan luas kabupaten File berisi data tinggi badan pasien. harus dicari pasien yang tertinggi
Banyaknya data yang tersimpan di file tidak bisa diketahui: –
File juga mungkin kosong!!
10/27/2015
KU1072/Pengantar Teknologi Informasi B
21
End Of File Data ke-n
Data ke-1
10/27/2015
11
Akses sekuensial: Dari data ke-1 s.d. ke-n
KU1072/Pengantar Teknologi Informasi B
22
Contoh: Isi file datakecamatan.dat 4846.92 14837.01 23957.65 5500.03 19540.93 15207.37 9193.97 5456.52 5102.91 4013.63 3599.23 4930.30 4524.83 2536.46 2400.66 4617.57 4155.54 6497.79 4291.79 2461.06 1462.32 ... 10/27/2015
... 1572.46 2550.68 4730.26 1834.50 1054.33 1102.91 2781.23 3157.51 3011.95 5308.34
Hitung total luas Kabupaten Bandung berdasarkan luas kecamatankecamatannya!!
Data luas kecamatan di Kab. Bandung (2009) dlm. Hektar (diakses dari http://bapeda.bandungkab.go.id/ index2.php?option=com_docman&task=doc_view&gid=79&I temid=37 pada 29 Mei 2013)
KU1072/Pengantar Teknologi Informasi B
23
Versi-1: Menggunakan While •
•
•
Buka File Jika belum sampai di akhir file (EOF) proses setiap record menggunakan while Tidak diberikan pesan jika File kosong
10/27/2015
KU1072/Pengantar Teknologi Informasi B
24
Buka File
while
true EOF? false Baca 1 record
Versi-1: Tidak ada penanganan khusus terhadap file kosong
Proses 1 record
Terminasi
Tutup File
10/27/2015
KU1072/Pengantar Teknologi Informasi B
25
Program LuasKabupaten; { Membaca isi luas kecamatan dari file dan menjumlahkannya untuk mendapatkan luas kabupaten} { KAMUS } var fin : file of real; luas : real; { variable utk luas kec yg sdg dibaca } luaskab : real; { variable utk luas kabupaten total } { ALGORITMA } begin assign(fin, ‘datakecamatan.dat’); reset(fin); Loop akan berhenti luaskab := 0; { inisialisasi } jika menemukan EOF while (not(EOF(fin))) do (akhir file) begin read(fin,luas); luaskab := luaskab + luas; end; writeln(‘Luas wilayah kabupaten Bandung tahun 2009 adalah ‘, luaskab:0:2, ‘ hektar’); close(fin); end. 10/27/2015
KU1072/Pengantar Teknologi Informasi B
26
Versi-2: Menggunakan If-Then-Else & Repeat-Until •
•
Buka file Periksa apakah sudah di akhir file (EOF) menggunakan if-else –
–
Jika true, berikan pesan “File kosong” Jika false, proses setiap record menggunakan repeatwhile
10/27/2015
KU1072/Pengantar Teknologi Informasi B
27
Versi-2: File Kosong ditangani secara khusus (diberikan pesan khusus: “File kosong”) Buka File Repeat-until true
EOF?
false
Output “File kosong”
Baca 1 record
Proses 1 record
EOF?
false
true Tutup File
10/27/2015
KU1072/Pengantar Teknologi Informasi B
Terminasi 28
Program LuasKabupaten; { Membaca isi luas kecamatan dari file dan menjumlahkannya untuk mendapatkan luas kabupaten} { KAMUS } var fin : file of real; luas : real; { variable utk luas kec yg sdg dibaca } luaskab : real; { variable utk luas kabupaten total } { ALGORITMA } begin assign(fin, ‘datakecamatan.dat’); reset(fin); if (EOF(fin)) then begin writeln(‘File kosong’); Pemrosesan end else { File tidak kosong } khusus jika file begin kosong luaskab := 0; { inisialisasi } repeat read(fin,luas); luaskab := luaskab + luas; until (EOF(fin)); writeln(‘Luas wilayah kabupaten Bandung tahun 2009 adalah ‘, luaskab:0:2, ‘ hektar’); end; close(fin); 10/27/2015 KU1072/Pengantar Teknologi Informasi B 29 end.
Menulis data ke dalam file •
Contoh: Menyimpan nilai mahasiswa skala 0 s.d. 100 sampai pengguna mengetik angka -999 (tidak termasuk nilai)
10/27/2015
KU1072/Pengantar Teknologi Informasi B
30
Program TulisNilai; { Membaca masukan dari keyboard dan simpan ke file } { KAMUS } var fout : file of integer; nr : integer; { ALGORITMA } begin assign(fout, ‘datanilai.dat’); rewrite(fout);
Data dibaca dari keyboard sampai pengguna mengetikkan -999
readln(nr); while (nr <> -999) do begin write(fout,nr); readln(nr); end; close(fout); 10/27/2015 end.
KU1072/Pengantar Teknologi Informasi B
Contoh isi file: 100 20 12 54 66 67 78 99
31
CONTOH-CONTOH
10/27/2015
KU1072/Pengantar Teknologi Informasi B
32
Contoh-1 •
•
Program dataku;
Apa yang akan tertulis di layar jika kode di samping dieksekusi?
{ ALGORITMA } begin assign(ins,‘dataku.dat’); reset(ins); sum := 0; while (not(EOF(ins))) do begin read(ins, num); sum := sum + num; end; close(ins); writeln(sum); end. KU1072/Pengantar Teknologi Informasi B 33
Isi file dataku.dat adalah: 1 2 3 4 5 1 2 3
10/27/2015
{ KAMUS } var ins : file of integer; sum, num : integer;
Contoh-2 •
•
Sebuah program digunakan untuk mengisi sebuah file of string namakota.txt yang berisi sekumpulan nama kota di Indonesia. Lihat contoh daftar nama kota di samping. Buatlah program untuk membaca file tersebut dan menuliskan ke layar seluruh nama kota yang tertulis dalam file itu. 10/27/2015
Jakarta Bandung Semarang Jogjakarta Medan Ambon Jayapura Palangkaraya Manado Kendari Padang Jambi
KU1072/Pengantar Teknologi Informasi B
34
Contoh-3 •
•
•
Diketahui sebuah file of integer mymarks.dat yang berisi daftar nilai mahasiswa di sebuah mata kuliah. Buatlah sebuah program yang membaca nilai-nilai tersebut dan menghasilkan nilai rata-rata dari semua mahasiswa File mungkin kosong. Jika file kosong, maka keluarkan pesan : “File kosong”.
10/27/2015
KU1072/Pengantar Teknologi Informasi B
35
Contoh-4 •
•
•
Pak Lurah Ganesha ingin menyimpan data umur penduduk di kelurahannya supaya suatu saat bisa digunakan untuk berbagai kebutuhan Bantulah Pak Lurah untuk membuat sebuah program yang menyimpan data masukan umur semua penduduk (umur adalah bilangan bulat) ke dalam suatu file, jika diketahui bahwa jumlah penduduk kelurahan adalah 100 orang. Petunjuk: gunakan loop for untuk mengendalikan entri data umur 10/27/2015
KU1072/Pengantar Teknologi Informasi B
36
Contoh-5a •
•
•
Diketahui sebuah file IPK.dat yang berisi daftar IPK mahasiswa sebuah fakultas/sekolah. Buatlah program yang membaca isi file IPK.dat dan kemudian memindahkan isinya ke file IPK_3.dat hanya IPK mahasiswa yang bernilai 3.00. File mungkin kosong. Jika file kosong, maka keluarkan pesan : “File kosong”.
10/27/2015
KU1072/Pengantar Teknologi Informasi B
37
Contoh-5b •
•
•
Bagaimana jika diinginkan data IPK mahasiswa yang bernilai 3.00 tidak disimpan ke file, melainkan ke sebuah array? Asumsikan data IPK yang akan disimpan tidak lebih banyak dari 100 buah Dengan demikian, selanjutnya akan dilakukan pemrosesan data pada array tidak dibahas di sini
10/27/2015
KU1072/Pengantar Teknologi Informasi B
38
Contoh-2 : Solusi Contoh-1 : Solusi •
Yang tertulis di layar adalah: 21
Program namakota; { Menuliskan nama kota dari file namakota.txt dan menampilkannya ke layar } { KAMUS } var ins : file of string; kota : string; { ALGORITMA } begin assign(ins,’namakota.txt’); reset(ins); while (not(EOF(ins))) do begin read(ins,kota); writeln(kota); end; close(ins); end.
10/27/2015
KU1072/Pengantar Teknologi Informasi B
39
Contoh-3: Solusi { File: nilairataan.pas } Program nilairataan; { Membaca nilai-nilai integer dari file dan menghasilkan rata-rata dari nilai-nilai tersebut. } { KAMUS } var f : file of real; x : integer; {bilangan} sum : integer; {jml bil} N : integer; {banyak bil} rata : real; {rata-rata} { ALGORITMA } begin assign(f,’mymarks.dat’); reset(f);
10/27/2015
{Membaca isi file sekaligus menjumlahkan dan menghitung banyaknya bilangan} sum := 0; N := 0; while (not(EOF(f))) do begin read(f,x); sum := sum + x; N := N + 1; end; {Menampilkan ke layar} if (N > 0) then begin writeln(‘Nilai rata-rata = ‘, sum/N); end else {N = 0, file kosong} begin writeln(‘File kosong’); end; close(f); end.
KU1072/Pengantar Teknologi Informasi B
40
Program UmurPenduduk; { Membaca data umur sebanyak jumlah penduduk dan menyimpan ke file } { KAMUS } var fout : file of integer; i, N, { banyak penduduk } umur : integer; { masukan umur }
Contoh-4: Solusi
{ ALGORITMA } begin assign(fout,’dataumur.dat’); rewrite(fout); N := 100; for i:=1 to N do begin read(umur); write(fout,umur); end. close(fout); 10/27/2015 end.
KU1072/Pengantar Teknologi Informasi B
41
Contoh-5a: Solusi Program DataIPKFile; { Membaca data IPK dari sebuah file dan menyimpan IPK >= 3.00 ke file lain }
if (EOF(infile)) then begin writeln(‘File kosong’); end else { File tidak kosong } begin
{ KAMUS } var infile : file of real; outfile : file of real; ipk : real;
repeat read(infile,ipk); if (ipk >= 3.00) then begin write(outfile,ipk); end; until (EOF(infile));
{ ALGORITMA } begin assign(infile,’IPK.dat’); reset(infile); assign(outfile,’IPK_3.dat’); rewrite(outfile);
end; close(outfile); close(infile); end.
10/27/2015
KU1072/Pengantar Teknologi Informasi B
42