Pengolahan string dan operasi file
String adalah sederetan karakter yang diapit dalam tanda kutip Sifat string String adalah list karakter Urutan mempengaruhi Panjang tidak terbatas Bisa berisi karakter kosong
Predikat pengolah string Concat Digunakan untuk menggabungkan 2 buah string concat(String1, String2, String3) String3 adalah hasil penggabungan Frontchar Digunakan untuk mengambil sebuah karakter awal di string frontchar(String, Karakter,SisaString) Frontsr Digunakan untuk memisahkan string menjadi 2 buah string lain frontstr(JmlKar,String,StringAwal,StringAkhir) Fronttoken Digunakan untuk memisahkan sebuah token pertama dari string fronttoken(String,Token,StringSisa) Str_len Digunakan untuk menghitung jumlah karakter suatu string str_len(String,Panjang)
Predikat pengubah jenis data Char_int Mengubah karakter ke kode ASCII nya dan sebaliknya char_int(Kar,Int) Str_char Mengubah string karakter tunggal menjadi karakter dan sebaliknya str_char(String,Kar) Str_int Mengubah string yang menyatakan integer menjadi integer dan sebaliknya str_int(String,Int) Str_real Mengubah string yang menyatakan bilangan real menjadi real dan sebaliknya str_real(Str,Real) Upper_lower Mengubah huruf besar menjadi huruf kecil dan sebaliknya baik untuk karakter maupun string upper_lower(HurufBesar,HurufKecil)
Contoh program mengubah format tanggal DOMAINS tanggal = string tgl = real PREDICATES ubah_tanggal(tanggal,tgl) CLAUSES Ubah_tanggal(Tang,Tanggal) :- frontsr(2,Tang,Tg,Tang1), frontchar(Tang1,_,Tang2), frontstr(2,Tang2,Bulan,Tang3), frontchar(Tang3,_,Tahun), concat(Tahun,Bulan,ThBl), concat(ThBl,Tg,Tgl), str_real(Tgl,Tanggal).
Contoh program Enkripsi DOMAINS kalimat = string PREDICATES enkripsi(kalimat,kalimat,kalimat) CLAUSES enkripsi(X,Y,Enk) :- frontchar(X,Ch,X1),!, char_int(Ch,ChInt), ChInt1 = ChInt – 1, char_int(Ch1,ChInt1), frontchar(Y1,Ch1,Y), enkripsi(X1,Y1,Enk). enkripsi(_,Y,Enk) :- !, Enk = Y.
Operasi file File sebagai piranti masukkan dan keluaran writedevice(file_tulis) readdevice(file_baca) Membaca dan Menulis file openread(NamaSimbolik,NamaFile) openwrite(NamaSimbolik,NamaFile) closefile(NamaSimbolik) Menambah Isi File openappend(NamaSimbolik,NamaFile) file_str(NamaFile,Output) Akses File Acak filepos(NamaSimbolik,Posisi,Modus) openmodify(NamaSimbolik,NamaFile) Akhir sebua file eof(NamaSimbolik) Operasi Lain existfile(NamaSimbolik) renamefile(FileLama,FileBaru) deletefile(NamaFile) disk(DosPath)
Contoh program tulis dan baca file DOMAINS file = nama_file PREDICATES tulis_file baca_file GOAL makewindow(1,11,5,”Baca-Tulis File”,5,10,15,60), tulis_file,nl, write(“File file3.dat dibaca kembali”),nl,nl, baca_file. CLAUSES tulis_file :- openwritedevice(nama_file,”a:file3.dat”), writedevice(nama_file), readln(Kalimat), write(Kalimat), closefile(nama_file), writedevice(screen). baca_file :- openread(nama_file,”a:file3.dat”), readdevice(nama_file), readln(Klm), write(Klm), closefile(nama_file).
Contoh program Menambah isi file DOMAINS file = file_tulis PREDICATES tambah_file GOAL clearwindow, write(“Tuliskan sebuah kalimat dan setelah “), write(“menekan enter, kalimat tsb akan ditambahkan ‘), write(“ke file file1.dat\n”), tambah_file. CLAUSES tambah_file :- openappend(file_tulis,”a:file1.dat\n”), writedevice(file_tulis), readln(Kalimat), write(Kalimat), closefile(file_tulis), writedevice(screen).
Contoh program menggabungkan dua buah file DOMAINS file = file1 nama = string PREDICATES gabung_file(nama,nama) GOAL makewindow(1,13,14,”Menggabungkan File”,3,10,18,60),nl, clearwindow,nl, write(“ Nama file 1 ”), readln(Nama1),nl, write(“ Nama file 2 “), readln(Nama2),nl, gabung_file(Nama1,Nama2), file_str(Nama1,Isi), display(Isi). CLAUSES tambah_file :- openappend(file_tulis,”a:file1.dat\n”), writedevice(file_tulis), readln(Kalimat), write(Kalimat), closefile(file_tulis), writedevice(screen).
program untuk melihat isi file pada posisi tertentu CLAUSES tulis_file(Nama) :- openwrite(nama_file,Nama), writedevice(nama_file), readln(Kalimat), write(Kalimat), closefile(nama_file), writedevice(screen). posisi :- readdevice(keyboard),nl, write(“ Posisi karakter yang dilihat : “), readint(Pos), readdevice(nama_file), filepos(nama_file,Pos,0), readchar(Kar), write(“ Karakter tersebut adalah : “,Kar), posisi. DOMAINS nama = string file = nama_file PREDICATES tulis_file(nama) posisi GOAL makewindow(1,13,14,”Posisi File”,3,10,18,60),nl write( “ Nama file : “), readln(Nama),nl, write(“Tuliskan kalimat yang akan disimpan di disket “),nl tulis_file(Nama),nl, write(“ Memeriksa karakter dalam file ”),nl,nl, openread(nama_file,nama), posisi.
Program mengubah isi file DOMAINS nama = string file = nama_file PREDICATES ubah_file(nama) GOAL makewindow(1,13,14,”Mengubah isi File”,3,10,18,60),nl write( “ Nama file : “), readln(Nama),nl file_str(Nama,Isi), write(Isi),nl,nl, ubah_file(Nama). CLAUSES ubah_file(Nama) :- openmodify(name_file,Nama), write(“ Posisi karakter yang akan di ubah : “), readint(Pos), writedevice(nama_file), filepos(nama_file,Pos,0), readln(Kata), write(Katat), closefile(nama_file), writedevice(screen). file_str(Nama,Isi_Baru), display(Isi_Baru).
Mengubah isi file menjadi huruf besar DOMAINS file = input;output PREDICATES menu ubah_file cek_eof(file) GOAL menu. CLAUSES menu :- makewindow(1,13,3,”Ubah File”,0,0,25,80),nl write( “ Nama file yang akan diubah ? “), readln(FileInput),nl, write( “ Nama file hasil ? “), readln(FileOutput), openread(input,FileInput), readdevice(input), openwrite(output,FileOutput), writedevice(output), ubah_file, closefile(input), closefile(output), write(“ Anda ingin memeriksa hasilnya (y/t) ? “), readchar(Jawaban), Jawaban = ‘y’,!, clearwindow file_str(FileOutput,Hasil), writedevice(screen), write(Hasil). menu :- write(“ \n Selesai”). ubah_file :- cek_eof(input), readln(Klm), upper_lower(KlmBesar,Klm), write(KlmBesar),nl, fail. ubah_file. cek_eof(_). cek_eof(File) :- not(eof(File)),cek_eof(File).