bahasa c sequensial

38
File Sekuensial Tim Pengajar KU 1071 Sem. 1 2012-2013 28/11/2012 1 KU1071/PR-TW-MLK

Upload: famyhaifan

Post on 16-Apr-2015

261 views

Category:

Documents


12 download

DESCRIPTION

opo bae

TRANSCRIPT

Page 1: Bahasa C sequensial

File Sekuensial

Tim Pengajar KU 1071

Sem. 1 2012-2013

28/11/2012 1KU1071/PR-TW-MLK

Page 2: Bahasa C sequensial

Tujuan

• Mahasiswa memahami penggunaan file

sekuensial

• Mahasiswa memahami primitif-primitif dasar

dalam pemrosesan file sekuensialdalam pemrosesan file sekuensial

• Mahasiswa memahami skema-skema dasar

untuk pembacaan dan penulisan file

sekuensial

28/11/2012 2KU1071/PR-TW-MLK

Page 3: Bahasa C sequensial

Konsep: Variabel vs File

• Variabel adalah bentuk penyimpanan internal– Nilai variabel hilang jika program selesai

• Bagaimana jika dibutuhkan nilai yang tidak hilang walaupun program selesai ?– nilainya dapat dipakai ketika program dijalankan kembali,

atau – nilainya dapat dipakai ketika program dijalankan kembali,

atau

– Nilainya digunakan oleh program lain

– Nilai variabel perlu disimpan di tempat lain ( file eksternal )

• File:– Bentuk penyimpanan eksternal dalam suatu media

penyimpanan

– Disimpan di secondary storage (mis. harddisk)

28/11/2012 KU1071/PR-TW-MLK 3

Page 4: Bahasa C sequensial

Wujud File

• File Teks:

– File yang isinya adalah teks (karakter)

– bisa dibaca dan dibuat langsung dengan menggunakaneditor teks pada umumnya

– Ekstensi file (biasanya) : .txt , .html– Ekstensi file (biasanya) : .txt , .html

– Contoh editor teks: notepad, vi, emacs, joe

• File biner (binary file):

– File yang isinya bukan teks (memiliki format khusus, misal File sekuensial)

– Contoh: Coba buka file *.jpg dengan editor teks biasa. Apayang terlihat?

28/11/2012 KU1071/PR-TW-MLK 4

Page 5: Bahasa C sequensial

Nama Fisik vs Nama Lojik

• File dalam media penyimpanan diidentifikasi dengan nama fisik

– Contoh: myfile.txt, fileku.pdf, mydoc.doc

– Setiap sistem operasi memiliki batasan sendiri untuk penamaan file:

28/11/2012 KU1071/PR-TW-MLK 5

– Setiap sistem operasi memiliki batasan sendiri untuk penamaan file:

• Contoh: DOS: maksimal 11 karakter, DOS dan Windows: case insensitive, Linux: case sensitive

• Dalam program, file akan dikenali dengan nama lojik

– Suatu variable dengan type data file

Page 6: Bahasa C sequensial

Definisi File Sekuensial

• Sequential file (Arsip sekuensial): sekumpulan

rekaman yang disimpan dalam media

penyimpanan sekunder komputer, yang dapat

diakses secara sekuensial mulai dari rekamandiakses secara sekuensial mulai dari rekaman

pertama sampai dengan rekaman yang

terakhir, rekaman per rekaman secara searah.

28/11/2012 KU1071/PR-TW-MLK 6

Page 7: Bahasa C sequensial

Ilustrasi File Sekuensial

MARK

Rekaman Terakhir

28/11/2012 KU1071/PR-TW-MLK 7

Urutan Akses

(satu per satu)

Rekaman Kedua

Rekaman Pertama

Page 8: Bahasa C sequensial

Deklarasi

• Menggunakan keyword SEQFILE

type rekaman : <.........> {sebuah

type terdefinisi (tipe dasar atau tipe

bentukan) untuk setiap rekaman}

NamaArsip: SEQFILE ofNamaArsip: SEQFILE of

(*) nama_rek: rekaman

(1) <mark> {konstanta}

• Catatan:

– (*) mungkin kosong, 1 rekaman, atau lebih

– Mark adalah nilai konstanta

28/11/2012 KU1071/PR-TW-MLK 8

Page 9: Bahasa C sequensial

Contoh Deklarasi

type rekamanMhs : < NIM:integer,

Nama:string,

Nilai:integer >

ArsipMhs: SEQFILE of

(*) rek_mhs: rekamanMhs(*) rek_mhs: rekamanMhs

(1) <9999,’’,9999>

type rekamanLokasi : <X:integer,Y:integer>

ArsipLokasi: SEQFILE of

(*) rek_lok: rekamanLokasi

(1) <9999,9999>

28/11/2012 KU1071/PR-TW-MLK 9

Page 10: Bahasa C sequensial

Contoh Deklarasi (lanjutan)

type rekamanInt : integer

ArsipInt: SEQFILE of

(*) rek_int: rekamanInt

(1) 9999

type rekamanCC : character

ArsipTeks: SEQFILE of

(*) CC: rekamanCC

(1) ‘#’

28/11/2012 KU1071/PR-TW-MLK 10

Page 11: Bahasa C sequensial

Primitif Pemrosesan File

• Terdapat sejumlah primitif untuk pemrosesan file

– Alokasi Nama fisik ke Name lojik (variabel): ASSIGN

– Membuka file: OPEN dan REWRITE

• OPEN : buka file yang sudah ada untuk dibaca

• REWRITE : buat file baru untuk ditulis• REWRITE : buat file baru untuk ditulis

– Membaca file: READ

– Menulis file: WRITE

– Menutup file: CLOSE

28/11/2012 KU1071/PR-TW-MLK 11

Page 12: Bahasa C sequensial

Definisi Primitif ASSIGN

procedure ASSIGN (input NamaArsip:SEQFILE,

input NamaFisik:string)

{

Arsip sekuensial pada program dikenal dengan nama

NamaArsip dan secara fisik dikenal dengan nama

NamaFisikNamaFisik

I.S.: sembarang

F.S.: Arsip dengan nama NamaArsip pada program

siap dipakai

}

28/11/2012 KU1071/PR-TW-MLK 12

Page 13: Bahasa C sequensial

Definisi Primitif OPEN

procedure OPEN (input NamaArsip:SEQFILE,

output rekamanArsip:rekaman)

{

Arsip sekuensial siap dibaca. Rekaman pertama

dibaca/disalin ke variabel rekamanArsip. Nama Tipe

‘rekaman’ sesuai dengan deklarasi‘rekaman’ sesuai dengan deklarasi

I.S.: NamaArsip sudah dikenal dan terhubung dengan

nama fisik

F.S.: Arsip dengan nama NamaArsip pada program

siap dibaca. rekamanArsip berisi data pada posisi

pertama.

}

28/11/2012 KU1071/PR-TW-MLK 13

Page 14: Bahasa C sequensial

Definisi Primitif REWRITE

procedure REWRITE (input NamaArsip:SEQFILE)

{

Arsip sekuensial siap ditulis.

I.S.: NamaArsip sudah terhubung dengan nama fisik

F.S.: Arsip dengan nama NamaArsip pada program

siap direkam pada posisi pertama

}

28/11/2012 KU1071/PR-TW-MLK 14

Page 15: Bahasa C sequensial

Definisi Primitif READ

procedure READ (input NamaArsip:SEQFILE,

output rekamanArsip:rekaman)

{

Rekaman berikutnya dibaca/disalin ke variabel

rekamanArsip. Data yang terakhir dibaca disebut

Current_rekamanCurrent_rekaman

I.S.: NamaArsip sudah siap dibaca. Current_rekaman

bukan MARK

F.S.: Posisi rekaman maju satu posisi. rekaman

berikutnya dibaca ke variabel rekamanArsip.

}

28/11/2012 KU1071/PR-TW-MLK 15

Page 16: Bahasa C sequensial

Definisi Primitif WRITE

procedure WRITE (input/output NamaArsip:SEQFILE,

input rekamanArsip:rekaman)

{

Data rekamanArsip direkam pada posisi aktual

arsip. Kemudian posisi dimajukan satu jika

rekamanArsip bukan MARKrekamanArsip bukan MARK

I.S.: NamaArsip dapat ditulis.

F.S.: jika rekamanArsip bukan MARK maka

rekamanArsip direkam pada posisi yang telah

disiapkan, lalu maju satu posisi. Jika

rekamanArsip adalah MARK maka NamaArsip tidak lagi

dapat ditulisi.

}

28/11/2012 KU1071/PR-TW-MLK 16

Page 17: Bahasa C sequensial

Definisi Primitif CLOSE

procedure CLOSE (input NamaArsip:SEQFILE)

{

Arsip sekuensial “ditutup”, tidak dapat diakses

maupun ditulisi lagi.

I.S.: sembarang

F.S.: Arsip tidak dapat dipakai lagi

}

28/11/2012 KU1071/PR-TW-MLK 17

Page 18: Bahasa C sequensial

Contoh Kasus Hangman

• Program Hangman memiliki kemampuan sbb:

– membaca file yang berisi nama dan skor pengguna

permainan Hangman. Program akan menghitung

skor rata-rata pengguna.skor rata-rata pengguna.

– Membaca isi file dan menyalinnya ke dalam array

pengguna (eksternal ke internal)

– Menyimpan isi array pengguna ke file (internal ke

eksternal)

28/11/2012 KU1071/PR-TW-MLK 18

Page 19: Bahasa C sequensial

Menghitung Nilai rata-rataProgram NILAIRATA_RATA

{ model proses sekuensial dg mark, dg penanganan kasus kosong }

Kamus:

type rekaman : < nama: string, nilai:integer [0..100] >

ArsipPengguna : SEQFILE of

(*) RekPengguna : rekaman { setiap pengguna punya 1 rekaman }

(1) <“eof”,99>

SumNil : integer { jumlah nilai}

JumPengguna : integer { jumlah pengguna }

Algoritma :

28/11/2012 KU1071/PR-TW-MLK 19

Algoritma :

ASSIGN(ArsipPengguna, “USER.DAT”);

OPEN(ArsipPengguna, RekPengguna) { First_Elmt }

if (RekPengguna.nama = “eof”) and (RekPengguna.nilai = 99) then

output (“Arsip kosong”)

else { Arsip tidak kosong }

SumNil ← 0; JumPengguna ← 0 { Inisialisasi }

repeat

SumNil ← SumNil+RekPengguna.nilai

JumPengguna ← JumPengguna+1 { Proses }

READ(ArsipPengguna, RekPengguna) { Next_Elmt }

until (RekPengguna.nama = “eof” and RekPengguna.nilai = 99) { EOP }

output (Sum/JumPengguna) { Terminasi }

CLOSE (ArsipPengguna)

Page 20: Bahasa C sequensial

Menyalin isi File ke ArrayProgram SALIN_DARI_FILE

{ model proses sekuensial dg mark, dg penanganan kasus kosong }

Kamus:

type Pengguna : < nama: string, nilai:integer [0..100] >

ArsipPengguna : SEQFILE of

(*) RekPengguna : Pengguna { setiap pengguna punya 1 rekaman }

(1) <“eof”,99>

TabelPengguna : array [1..100] of Pengguna { array data Pengguna }

JumPengguna : integer { jumlah pengguna }

28/11/2012 KU1071/PR-TW-MLK 20

Algoritma :

ASSIGN(ArsipPengguna, “USER.DAT”);

OPEN(ArsipPengguna, RekPengguna) { First_Elmt }

if (RekPengguna.nama = “eof”) and (RekPengguna.nilai = 99) then

output (“Arsip kosong”)

else { Arsip tidak kosong }

JumPengguna ← 0 { Inisialisasi }

repeat

JumPengguna ← JumPengguna+1

TabelPenggunaJumPengguna ← RekPengguna { Proses }

READ(ArsipPengguna, RekPengguna) { Next_Elmt }

until (RekPengguna.nama = “eof” and RekPengguna.nilai = 99) or

(JumPengguna=100) { EOP }

CLOSE(ArsipPengguna) { Terminasi }

Page 21: Bahasa C sequensial

Menyalin isi Array ke FileProgram SALIN_KE_FILE

{ model proses sekuensial dg mark, dg penanganan kasus kosong }

Kamus:

type Pengguna : < nama: string, nilai:integer [0..100] >

ArsipPengguna : SEQFILE of

(*) RekPengguna : Pengguna { setiap pengguna punya 1 rekaman }

(1) <“eof”,99>

TabelPengguna : array [1..100] of Pengguna { array data Pengguna}

i, JumPengguna : integer { counter, jumlah pengguna }

Algoritma :

28/11/2012 KU1071/PR-TW-MLK 21

Algoritma :

{ ... TabelPengguna sudah terisi ... }

ASSIGN(ArsipPengguna, “USER.DAT”);

REWRITE(ArsipPengguna) { Buka file untuk ditulisi }

if (JumPengguna=0) then

output(“Tabel kosong”)

else

i ← 1 { Inisialisasi, First-Elmt }

repeat

RekPengguna ← TabelPenggunaiWRITE(ArsipPengguna,RekPengguna) { Proses }

i ← i+1 { Next-Elmt }

until (i > JumPengguna) { EOP }

WRITE(“eof”,99) { Terminasi, tulis MARK }

CLOSE (ArsipPengguna)

Page 22: Bahasa C sequensial

Latihan

1. Buatlah program yang membaca file

sekuensial rekaman bertipe Pengguna lalu

tuliskan ke file sekuensial lain dengan

spesifikasi hanya menulis rekaman yang spesifikasi hanya menulis rekaman yang

berisi komponen nilai >= 80

2. Buatlah program yang membaca file

sekuensial bertipe Pengguna lalu menuliskan

nilainya saja ke file sekuensial lain.

28/11/2012 KU1071/PR-TW-MLK 22

Page 23: Bahasa C sequensial

FILE EKSTERNAL

Translasi C

28/11/2012 23KU1071/PR-TW-MLK

Page 24: Bahasa C sequensial

Contoh Deklarasi

(dalam Bahasa C)#include <stdio.h>

int main () {

/* KAMUS */

/* contoh type bentukan */

typedef struct { int x;

int y;

} Point;

28/11/2012 KU1071/PR-TW-MLK 24

} Point;

/* deklarasi file */

FILE *FT; /* file teks */

FILE *FI; /* file dengan data bertype integer */

FILE *FP; /* file dengan data bertype Point */

/* ALGORITMA */

...

}

Page 25: Bahasa C sequensial

Catatan

• Dalam bahasa C tidak dikenal primitif assign

secara khusus

28/11/2012 KU1071/PR-TW-MLK 25

Page 26: Bahasa C sequensial

Membuka File (1/2)• NamaLojik = fopen(NamaFisik, “r”)

– Mempersiapkan file untuk dibaca (read-only) sehinggadapat dibaca dengan menggunakan prosedur untukmembaca isi file

– “r” adalah format pembukaan file yang menentukanbahwa pembukaan file adalah read-only

– fopen berbeda dengan primitif OPEN (di notasi algoritmik) karena belum membaca 1 rekaman

28/11/2012 KU1071/PR-TW-MLK 26

karena belum membaca 1 rekaman

/* Kamus */

FILE *f;

char CC;

char FILE_NAME[63] = “pitakar.txt”;

int retval;

/* Algoritma */

f = fopen(FILE_NAME,“r”); /* buka file dengan modus read-only */

retval = fscanf(f,“%c”,&CC); /* baca karakter pertama dari file */

...

Page 27: Bahasa C sequensial

Membuka File (2/2)• NamaLojik = fopen(NamaFisik,”w”)

– Mempersiapkan file untuk dibaca dan siap untuk ditulis

– “w” adalah mode untuk membaca file dan siap menulis dengan cara menghapus yang lama

/* Kamus */

28/11/2012 KU1071/PR-TW-MLK 27

FILE *f;

char CC;

int retval;

/* Algoritma */

f = fopen(“pitakar.txt”,“w”); /* buka file dengan modus rekam */

retval = fprintf (f,“%s”,“Hello”); /* menuliskan string ke file */

...

Page 28: Bahasa C sequensial

Membaca File• retval = fscanf(NamaLojik,format,var)

– retval : integer � 1 jika pembacaan berhasil, -1 jika sudah mencapai EOF

Hello

123

Masukan: fileku.txt

28/11/2012 KU1071/PR-TW-MLK 28

/* Kamus */

FILE *f;

char str[20];

int bil;

int retval;

/* Algoritma */

f = fopen(“fileku.txt”,“r”); /* buka file dengan modus read-only */

retval = fscanf(f,“%s”,str); /* str = Hello */

retval = fscanf(f,“%d”,&bil); /* bil = 123 */

...

Perhatikan perbedaan penanda &

untuk type string dan nonstring

Page 29: Bahasa C sequensial

Menulis File• retval = fprintf(NamaLojik,format,input)

/* Kamus */

FILE *f;

/* Algoritma */

f = fopen("fileku.txt","w"); /*buka file modus rekam*/

retval = fprintf(f,"%s","Hello\n");

28/11/2012 KU1071/PR-TW-MLK 29

retval = fprintf(f,"%s","Hello\n");

retval = fprintf(f,"%d",123);

...

Hello

123

Hasil: fileku.txt

Page 30: Bahasa C sequensial

Menutup File

• fclose (NamaLojik)

– File “ditutup”, tidak dapat diakses dan ditulis lagi

/* Kamus */

FILE *f;

28/11/2012 KU1071/PR-TW-MLK 30

FILE *f;

/* Algoritma */

f = fopen(“pitakar.txt”,“r”);

...

fclose(f);

...

Page 31: Bahasa C sequensial

EOF (End Of File)

• EOF

– Konstanta

End of File

/* Kamus */

FILE *f;

char CC;

int retval;

/* Algoritma */

f = fopen("pitakar.txt","r");

retval = fscanf(f,"%c",&CC);

if (retval != EOF) {

do {

28/11/2012 KU1071/PR-TW-MLK 31

do {

printf("%c",CC);

retval = fscanf(f,"%c",&CC);

} while (retval != EOF);

} else {

printf("File kosong");

}

fclose(f);

...

Page 32: Bahasa C sequensial

Skema Dasar Pemrosesan File

• Pembacaan File

– Tanpa memanfaatkan EOF

– Memanfaatkan EOF

� Menggunakan while atau repeat-until (do-while)

28/11/2012 KU1071/PR-TW-MLK 32

� Menggunakan while atau repeat-until (do-while)

• Menulis Isi File

Page 33: Bahasa C sequensial

Skema Dasar Pembacaan File

1. Tanpa Memanfaatkan EOF• Membaca sebuah text file

diakhiri ‘.‘ dan menuliskan apa adanya ke layar

• Program ini tidak memanfaatkan EOF.

• Jadi, tidak boleh ada file yang hanya mengandung

/* File : bacatext1.c */

/* Program BacaText1 */

/* Membaca sebuah text file diakhiri '.'

dan menuliskan apa adanya ke layar */

#include <stdio.h>

int main () {

/* Kamus */

FILE *f;

char CC;

int retval;

28/11/2012 KU1071/PR-TW-MLK 33

yang hanya mengandung EOF.

• File kosong berisi sebuah karakter ‘.’

• Skema repeat-until (do-while)– Pemeriksaan kasus kosong

int retval;

/* Algoritma */

f = fopen("pitakar.txt","r");

retval = fscanf(f,"%c",&CC);

if (CC == '.') {

printf("Arsip Kosong");

} else /* CC bukan '.' */ {

do {

printf("%c",CC);

retval = fscanf (f,"%c",&CC);

} while (CC != '.');

}

fclose(f);

return 0;

}

Page 34: Bahasa C sequensial

Skema Dasar Pembacaan File

1. Tanpa Memanfaatkan EOF

• Dengan while-do:

– Tanpa penanganan

khusus terhadap

kasus file kosong

– Jika file kosong,

/* File : bacatext2.c */

/* Program BacaText2 */

/* Membaca sebuah text file diakhiri '.'

dan menuliskan apa adanya ke layar */

#include <stdio.h>

int main () {

/* Kamus */

FILE *f;

char CC; /* karakter yang dibaca */

int retval;

28/11/2012 KU1071/PR-TW-MLK 34

– Jika file kosong,

seolah-olah tidak

melakukan apa-

apa

int retval;

/* Algoritma */

f = fopen("pitakar.txt","r");

retval = fscanf(f,"%c",&CC);

while (CC != '.') {

printf("%c",CC);

retval = fscanf (f,"%c",&CC);

} /* CC == '.' */

fclose(f);

return 0;

}

Page 35: Bahasa C sequensial

Skema Dasar Pembacaan File

2. Memanfaatkan EOF• Membaca file yang

diakhiri dengan eof

• Memanfaatkan eof untuk menghentikan pembacaan file

• Skema repeat-until (do-while)

/* File : bacatext3.c */

/* Program BacaText3 */

/* Membaca sebuah text file diakhiri EOF dan

menuliskan apa adanya ke layar */

#include <stdio.h>

int main () {

/* Kamus */

FILE *f;

char CC;

int retval;

28/11/2012 KU1071/PR-TW-MLK 35

(do-while)– Pemeriksaan kasus

kosong

int retval;

/* Algoritma */

f = fopen("pitakar.txt","r");

retval = fscanf(f,"%c ",&CC);

if (retval == EOF) {

printf("Arsip Kosong");

} else /* retval = EOF */ {

do {

printf("%c",CC);

retval = fscanf (f,"%c",&CC);

} while (retval != EOF);

}

fclose(f);

return 0;

}

Page 36: Bahasa C sequensial

Skema Dasar Pembacaan File

2. Memanfaatkan EOF

• Dengan while-do:

– Tanpa penanganan

khusus terhadap

kasus kosong

/* File : bacatext4.c */

/* Program BacaText4 */

/* Membaca sebuah text file diakhiri EOF dan

menuliskan apa adanya ke layar */

#include <stdio.h>

int main () {

/* Kamus */

FILE *f;

char CC; /* karakter yang dibaca */

int retval;

28/11/2012 KU1071/PR-TW-MLK 36

int retval;

/* Algoritma */

f = fopen("pitakar.txt","r");

retval = fscanf(f,"%c",&CC);

while (retval != EOF) {

printf("%c",CC);

retval = fscanf (f,"%c",&CC);

} /* retval = EOF */

fclose(f);

return 0;

}

Page 37: Bahasa C sequensial

Menulis File

File Teks/* File : rekamteks.c */

/* Program rekamteks */

/* Membaca teks dari keyboard, diakhiri dengan '#', file diakhiri dengan EOF */

#include <stdio.h>

int main () {

/* KAMUS */

FILE *f;

int retval;

char CC;

28/11/2012 KU1071/PR-TW-MLK 37

char CC;

/* ALGORITMA */

f = fopen("pitakar.txt","w");

printf("Masukkan karakter (# untuk mengakhiri): ");

scanf("%c",&CC);

while (CC != '#') {

retval = fprintf(f,"%c",CC);

printf("Masukkan karakter (# untuk mengakhiri): ");

scanf(" %c",&CC);

} /* CC = '#' */

fclose(f);

return 0;

}

Page 38: Bahasa C sequensial

Menulis File

File of Integer/* file: rekamint.c */

/* Program rekamint */

/* Membaca angka/integer dari keyboard dan menyimpan ke file. Akhiri

pembacaan dengan 999. File diakhiri EOF. */

#include <stdio.h>

int main () {

/* KAMUS */

FILE *fileku;

int retval;

int bil;

28/11/2012 KU1071/PR-TW-MLK 38

int bil;

/* ALGORITMA */

fileku = fopen("myint.dat","w");

printf("Masukkan integer (999 untuk mengakhiri): ");

scanf("%d",&bil);

while (bil != 999) {

retval = fprintf(fileku,"%d\n",bil);

printf("Masukkan integer (999 untuk mengakhiri): ");

scanf("%d",&bil);

} /* bil == 999 */

fclose(fileku);

return 0;

}