-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuku_handler.pas
112 lines (99 loc) · 3.6 KB
/
buku_handler.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
unit buku_handler;
interface
uses
tipe_data;
{ KONSTANTA }
const
nmax = 1000; // Asumsi bahwa size terbesar dari database adalah 1000
{ DEKLARASI TIPE }
type
buku = record
ID_Buku, Judul_Buku, Author, Jumlah_Buku, Tahun_Penerbit, Kategori : string;
end;
tabel_buku = record
t: array [0..nmax] of buku;
sz: integer; // effective size
end;
{ DEKLARASI FUNGSI DAN PROSEDUR }
function tambah(s: arr_str): tabel_buku;
procedure cetak(data_tempbuku: tabel_buku);
function konversi_csv(data_tempbuku: tabel_buku): arr_str;
{ IMPLEMENTASI FUNGSI DAN PROSEDUR }
implementation
function tambah(s: arr_str): tabel_buku;
{ DESKRIPSI : Memasukkan data dari array of string kedalam tabel_buku }
{ PARAMETER : array of string }
{ RETURN : data buku }
{ KAMUS LOKAL }
var
col, row: integer;
temp: string;
c: char;
data_tempbuku : tabel_buku;
{ ALGORITMA }
begin
data_tempbuku.sz := 0;
for row:=0 to s.sz-1 do
begin
col := 0;
temp := '';
// Membaca baris dan memisahkan tiap kolom setiap kali mendapatkan karakter ','
// data di indeks ke-0 merupakan header
for c in s.st[row] do
begin
if(c=',') then // Jika ketemu koma, maka masukkan data ke kolom
begin
// 0 based indexing
case col of
0: data_tempbuku.t[data_tempbuku.sz].ID_Buku := temp;
1: data_tempbuku.t[data_tempbuku.sz].Judul_Buku := temp;
2: data_tempbuku.t[data_tempbuku.sz].Author := temp;
3: data_tempbuku.t[data_tempbuku.sz].Jumlah_Buku := temp;
4: data_tempbuku.t[data_tempbuku.sz].Tahun_Penerbit := temp;
end;
col := col+1;
temp := '';
end else temp := temp+c; // Jika belum ketemu koma, maka tambahkan tambahkan karakter ke string untuk data di kolom selanjutnya
end;
// Kolom terakhir
data_tempbuku.t[data_tempbuku.sz].Kategori := temp;
data_tempbuku.sz := data_tempbuku.sz+1;
end;
tambah := data_tempbuku;
end;
function konversi_csv(data_tempbuku: tabel_buku): arr_str;
{ DESKRIPSI : Fungsi untuk mengubah data buku menjadi array of string }
{ PARAMETER : data buku }
{ RETURN : array of string }
{ KAMUS LOKAL }
var
i : integer;
ret : arr_str;
{ ALGORITMA }
begin
ret.sz := data_tempbuku.sz;
for i:=0 to data_tempbuku.sz do
begin
ret.st[i] := data_tempbuku.t[i].ID_Buku + ',' +
data_tempbuku.t[i].Judul_Buku + ',' +
data_tempbuku.t[i].Author + ',' +
data_tempbuku.t[i].Jumlah_Buku + ','+
data_tempbuku.t[i].Tahun_Penerbit + ',' +
data_tempbuku.t[i].Kategori;
end;
konversi_csv := ret;
end;
procedure cetak(data_tempbuku: tabel_buku); // for debugging
{ DESKRIPSI : Prosedur sederhana yang digunakan pada proses pembuatan program untuk debugging, prosedur ini mencetak data ke layar }
{ PARAMETER : Data yang akan dicetak }
{ KAMUS LOKAL }
var
i: integer;
{ ALGORITMA }
begin
for i:=0 to data_tempbuku.sz-1 do
begin
writeln(data_tempbuku.t[i].ID_Buku, ' | ', data_tempbuku.t[i].Judul_Buku, ' | ', data_tempbuku.t[i].Author, ' | ', data_tempbuku.t[i].Jumlah_Buku, ' | ', data_tempbuku.t[i].Tahun_Penerbit, ' | ', data_tempbuku.t[i].Kategori);
end;
end;
end.