Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit uf1load;
- interface
- const mark : char = '|';
- { Definisi ABSTRACT DATA TYPE FileEksternal }
- type FileEksternal = record
- fin : text; {File masuk}
- fout : text; {File keluar}
- end;
- { Definisi ABSTRACT DATA TYPE TypeBahanMentah }
- type TypeBahanMentah = record
- Nama : Array [1..100] of string;
- HargaStr : Array [1..100] of string; {Harga dalam tipe string}
- DurasiStr : Array [1..100] of string ; {Durasi dalam tipe string}
- Harga : Array [1..100] of longint; {Harga yang sudah dikonversi ke tipe longint}
- Durasi : Array [1..100] of integer; {Durasi yang sudah dikonversi ke tipe integer}
- BarisText : string; {membantu dalam membaca 1 baris di file eksternal}
- end;
- { Definisi ABSTRACT DATA TYPE TypeBahanOlahan }
- type TypeBahanOlahan = record
- Nama : Array [1..100] of string;
- HargaStr : Array [1..100] of string; {Harga dalam tipe string}
- Harga : Array [1..100] of longint; {Harga yang sudah dikonversi ke tipe longint}
- BanyakStr : Array [1..100] of string ; {Banyak dalam tipe string}
- Banyak : Array [1..100] of longint ; {Banyak yang sudah dikonversi ke tipe longint}
- Bahan : Array [1..100, 1..100] of string; {Bahan ke-N}
- BarisText : string; {membantu dalam membaca 1 baris di file eksternal}
- PanjangN : array [1..100] of longint;
- end;
- { Definisi ABSTRACT DATA TYPE LokasiMark }
- type LokasiMark= record
- Guard : Array [1..1000] of longint;
- end;
- {*** KELOMPOK Interaksi dengan I/O device, BACA/TULIS ***}
- procedure LoadBahanMentah ( var FileBahanMentahLoad : FileEksternal ; var BahanMentahLoad : TypeBahanMentah );
- {I.S. : File Eksternal untuk Bahan Mentah terdefinisi sebagai input. }
- {F.S. : Mengeluarkan output berupa variabel BahanMentahLoad yang bertipe TypeBahanMentah, yang artinya sudah terload ke dalam array}
- procedure LoadBahanOlahan ( var FileBahanOlahanLoad : FileEksternal ; var BahanOlahanLoad : TypeBahanOlahan );
- {I.S. : File Eksternal untuk Bahan Olahan terdefinisi sebagai input. }
- {F.S. : Mengeluarkan output berupa variabel BahanMentahLoad yang bertipe TypeBahanOlahan, yang artinya sudah terload ke dalam array}
- implementation
- procedure LoadBahanMentah ( var FileBahanMentahLoad : FileEksternal ; var BahanMentahLoad : TypeBahanMentah );
- {I.S. : File Eksternal untuk Bahan Mentah terdefinisi sebagai input. }
- {F.S. : Mengeluarkan output berupa variabel BahanMentahLoad yang bertipe TypeBahanMentah, yang artinya sudah terload ke dalam array}
- var
- i,iGuard,baris : integer; { i untuk indeks, iGuard untuk indeks dimana "|" ditemukan, baris untuk baris pada file eksternal}
- lokGuard : LokasiMark; {array berisi lokasi / indeks yang terdapat "|" }
- lanjut : string;
- begin
- if (EOF ( FileBahanMentahLoad.fin )) then begin {Penanganan File kosong}
- writeln ('File kosong!');
- end else begin {Penanganan file tidak kosong}
- baris := 1;
- while not ( EOF (FileBahanMentahLoad.fin ) ) do begin
- readln ( FileBahanMentahLoad.fin , BahanMentahLoad.BarisText);
- iGuard := 1;
- for i := 1 to length (BahanMentahLoad.BarisText) do begin
- if ( BahanMentahLoad.BarisText[i] = mark ) then begin
- lokGuard.Guard[iGuard] := i; {memasukkan indeks yang terdapat "|" ke dalam array }
- iGuard := iGuard + 1;
- end;
- end;
- iGuard := 1;
- BahanMentahLoad.Nama [baris] := copy(BahanMentahLoad.BarisText,1,lokGuard.Guard[iGuard]-2);
- {Mengambil substring pada string satu baris di file eksternal, dari awal string sampai ditemukan lokasi "|" pertama dikurangi 2 (untuk menghilangkan spasi.}
- delete(BahanMentahLoad.BarisText,1,length(BahanMentahLoad.Nama [baris])+3);
- {Menghapus substring pada string satu baris di file eksternal, dari awal string sampai ditemukan lokasi "|" pertama ditambah 3 (untuk menghilangkan spasi.)}
- BahanMentahLoad.HargaStr [baris] := copy(BahanMentahLoad.BarisText,1,(lokGuard.Guard[iGuard+1]-length(BahanMentahLoad.Nama[baris])-3)-2);
- {Mengambil substring pada string satu baris di file eksternal, dari awal string (posisi "|" dikurangi panjang string sebelum posisi tersebut),
- sampai ditemukan lokasi "|" pertama dikurangi 5 (untuk menghilangkan spasi.}
- val(BahanMentahLoad.HargaStr[baris],BahanMentahLoad.Harga[baris]); {Mengonversi string ke integer}
- delete (BahanMentahLoad.BarisText,1,length (BahanMentahLoad.HargaStr[baris]) + 3 );
- BahanMentahLoad.DurasiStr[baris] := BahanMentahLoad.BarisText; {Karena string yang tersisa hanya durasi -> sisanya dihapus oleh fungsi delete}
- val(BahanMentahLoad.DurasiStr[baris],BahanMentahLoad.Durasi[baris]);
- baris := baris+1;
- end;
- {MENGOUTPUT HASIL PADA PROGRAM}
- for i := 1 to baris-1 do begin
- writeln ('Bahan mentah ke- ' , i , ' : ');
- writeln ('Nama : ', BahanMentahLoad.Nama[i]);
- writeln ('Harga : ', BahanMentahLoad.Harga[i]);
- writeln ('Durasi Kadaluarsa : ', BahanMentahLoad.Durasi[i], ' hari');
- writeln ('----------------------------------------------------------------------------');
- writeln();
- repeat
- writeln ('Ketik angka "1" untuk melanjutkan!');
- readln (lanjut); {Penguna harus mengetikan angka 1 untuk melanjutkan output pada program}
- until (lanjut = '1');
- writeln();
- writeln ('----------------------------------------------------------------------------');
- end;
- end;
- end;
- procedure LoadBahanOlahan ( var FileBahanOlahanLoad : FileEksternal ; var BahanOlahanLoad : TypeBahanOlahan );
- {I.S. : File Eksternal untuk Bahan Olahan terdefinisi sebagai input. }
- {F.S. : Mengeluarkan output berupa variabel BahanMentahLoad yang bertipe TypeBahanOlahan, yang artinya sudah terload ke dalam array}
- var
- i, j, iGuard, baris, jumlahGuard ,panjangsebelum, temp : integer;
- { i untuk indeks matriks 1 dimensi , i dan j untuk indeks matriks 2 dimensi, iGuard untuk indeks dimana "|" ditemukan,
- baris untuk baris pada file eksternal, jumlahGuard untuk menghitung jumlah "|" yang muncul pada file eksternal , panjangsebelum untuk
- menghitung panjang string sebelum "|" ada, temp untuk menyimpan variabel sementara}
- bahankeN : TypeBahanOlahan; {Banyak bahan sejumlah N, dibuat array karena tiap baris pada file eksternal berbeda jumlah N}
- lokGuard : LokasiMark;
- lanjut : string;
- begin
- if (EOF ( FileBahanOlahanLoad.fin )) then begin {Penanganan File kosong}
- writeln ('File kosong!');
- end else begin {File Tidak Kosong}
- baris := 1;
- while not ( EOF (FileBahanOlahanLoad.fin ) ) do begin
- readln ( FileBahanOlahanLoad.fin , BahanOlahanLoad.BarisText);
- iGuard := 1;
- for i := 1 to length (BahanOlahanLoad.BarisText) do begin
- if ( BahanOlahanLoad.BarisText[i] = mark ) then begin
- lokGuard.Guard[iGuard] := i; {memasukkan indeks yang terdapat "|" ke dalam array }
- iGuard := iGuard + 1;
- end;
- end;
- JumlahGuard := iGuard - 1;
- iGuard := 1; {Inisiasi awal}
- panjangsebelum := 0; {Inisiasi awal}
- BahanOlahanLoad.Nama [baris] := copy(BahanOlahanLoad.BarisText,1,lokGuard.Guard[iGuard]-2);
- {Mengambil substring pada string satu baris di file eksternal, dari awal string sampai ditemukan lokasi "|" pertama dikurangi 2 (untuk menghilangkan spasi.}
- delete(BahanOlahanLoad.BarisText,1,length(BahanOlahanLoad.Nama [baris])+3);
- {Menghapus substring pada string satu baris di file eksternal, dari awal string sampai ditemukan lokasi "|" pertama ditambah 3 (untuk menghilangkan spasi.)}
- panjangsebelum := length(BahanOlahanLoad.Nama [baris])+3; {panjang string sebelum "|" ditemukan atau panjang string nama bahan ditambah 3}
- BahanOlahanLoad.HargaStr [baris] := copy(BahanOlahanLoad.BarisText,1,(lokGuard.Guard[iGuard+1]-panjangsebelum)-2);
- val(BahanOlahanLoad.HargaStr[baris],BahanOlahanLoad.Harga[baris]); {Mengonversi string ke integer}
- delete (BahanOlahanLoad.BarisText,1,length (BahanOlahanLoad.HargaStr[baris]) + 3 );
- panjangsebelum := panjangsebelum + (length (BahanOlahanLoad.HargaStr[baris]) + 3 );
- BahanOlahanLoad.BanyakStr[baris] := copy(BahanOlahanLoad.BarisText,1,(lokGuard.Guard[iGuard+2]-panjangsebelum)-2);
- val(BahanOlahanLoad.BanyakStr[baris],BahanOlahanLoad.Banyak[baris]);
- delete (BahanOlahanLoad.BarisText,1,length (BahanOlahanLoad.BanyakStr[baris]) + 3 );
- panjangsebelum := panjangsebelum + (length (BahanOlahanLoad.BanyakStr[baris]) + 3 );
- iGuard := 3; {Menandakan jumlah "|" yang sudah lebih dari 2.}
- bahankeN.PanjangN [baris] := 1;
- while ( bahankeN.PanjangN [baris] <= (JumlahGuard-2) ) do begin
- if ( bahankeN.PanjangN[baris] <> JumlahGuard-2) then begin
- BahanOlahanLoad.Bahan[baris][bahankeN.PanjangN[baris]] := copy(BahanOlahanLoad.BarisText,1,(lokGuard.Guard[iGuard+1]-panjangsebelum)-2);
- {Bahan ke-N adalah substring dari string asal}
- delete (BahanOlahanLoad.BarisText,1,length (BahanOlahanLoad.Bahan[baris][bahankeN.PanjangN[baris]] ) + 3 );
- iGuard := iGuard + 1;
- panjangsebelum := panjangsebelum + length (BahanOlahanLoad.Bahan[baris][bahankeN.PanjangN[baris]] ) + 3 ;
- end else begin {Jika hanya tersisa string berupa Bahan Ke-N (terakhir karena sebelumnya sudah didelete semua)}
- BahanOlahanLoad.Bahan[baris][bahankeN.PanjangN[baris]] := BahanOlahanLoad.BarisText;
- end;
- bahankeN.PanjangN [baris] := bahankeN.PanjangN[baris] + 1;
- end;
- baris := baris+1;
- end;
- end;
- {MENGOUTPUT HASIL PADA PROGRAM }
- temp := baris- 1;
- baris := 1; {Reset kembali}
- for i := 1 to temp do begin
- writeln ('Bahan olahan ke- ' , i , ' : ');
- writeln ('Nama : ', BahanOlahanLoad.Nama[i]);
- writeln ('Harga Jual : ', BahanOlahanLoad.Harga[i]);
- writeln ('Banyak : ', BahanOlahanLoad.Banyak[i]);
- write ('Bahan yang dibutuhkan : ');
- for j := 1 to bahankeN.PanjangN[baris]-1 do begin {Karena jumlah N berbeda tiap baris}
- if ( j <> bahankeN.PanjangN[baris]-1 ) then begin
- write (BahanOlahanLoad.Bahan[i][j],', ');
- end else begin
- write (BahanOlahanLoad.Bahan[i][j]); {Dipisah dengan kondisional atas agar tidak kelebihan koma}
- end;
- end;
- writeln();
- baris := baris + 1;
- writeln ('----------------------------------------------------------------------------');
- writeln();
- repeat
- writeln ('Ketik angka "2" untuk melanjutkan!');
- readln (lanjut); {Penguna harus mengetikan angka 2 untuk melanjutkan output pada program}
- until (lanjut = '2');
- writeln ();
- writeln ('----------------------------------------------------------------------------');
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement