Monday, 10 June 2013

Program Sederhana untuk Replace String (Part III)



Tulisan ini merupakan lanjutan dari:
Program Sederhana untuk Replace String (Part I) - (Part II)


Kita coba kembangkan program sebelumnya dengan beberapa fungsi yang akan kita tambahkan berikut:
    1. Kondisi dan hasil pencarian dapat ditambahkan.
    2. Pemeriksaan bersifat non Sensitif , tidak membedakan huruf besar dan kecil.
    3. Membuat sebuah file untuk hasil replace.
    4. Menampilkan pesan kelasahan jika file tidak ada.
Perhatian! gunakan "using namespace std;" , jika beberapa fungsi dan objek yang digunakan tidak dikenal pada kode-kode di artikel ini. Untuk poin terakhir tambahkan kode berikut setelah memanggil file:

... if(PanggilFile == NULL){ cout<<"\nFile bermasalah atau tidak ada.\n"; PanggilFile.close(); //menutup program return 0; } ...

Agar array Kata (variabel dengan tipe data struct) bersifat dinamis, kita gunakan vector. Sehingga tampak seperti kode berikut:

... //bykKey = Banyaknya Key //const int bykKey = 5; //struct sReplace //{ // string Kondisi; // string Hasil; //} Kata[bykKey]; struct sReplace { string Kondisi; string Hasil; }; vector<sReplace>Kata; void initKata() { //mengunakan variabel sementara sReplace Kata_; Kata_.Kondisi = "satu"; Kata_.Hasil = "one"; Kata.push_back(Kata_); Kata_.Kondisi = "dua"; Kata_.Hasil = "two"; Kata.push_back(Kata_); Kata_.Kondisi = "tiga"; Kata_.Hasil = "three"; Kata.push_back(Kata_); Kata_.Kondisi = "Empat"; Kata_.Hasil = "four"; Kata.push_back(Kata_); Kata_.Kondisi = "lima"; Kata_.Hasil = "five"; Kata.push_back(Kata_); } ...

Dengan vector kita dapat leluasa menambahkan atau mengurangi, tanpa cemas untuk menentukan berapa jumlah memory yang akan dipakai. Untuk menambahkan objek sReplace(string Kondisi dan Hasil) kita menggunakan fungsi push_back. Kelima kata diatas hanya sebuah standar agar tidak kosong. Dibandingkan menambahkan kata yang dicari pada Source Code selanjutnya meng-kompilasi program, tentu lebih baik kita tanyakan saya kepada User-nya. Berikut ini potongan kode untuk meminta user menambahkan:

... char pilihan[1]; cout<<" Ingin menambahkan Kondisi dan Hasil? (y/Y = Yes) "; cin.getline(pilihan,2); if (pilihan[0]== 'y' || pilihan[0]=='Y'){ while (true){ sReplace rTemp_; string sKata; cout<<"Masukkan Kondisi : "; getline(cin,sKata); rTemp_.Kondisi = sKata; cout<<"Masukkan Hasil : "; getline(cin,sKata); rTemp_.Hasil = sKata; Kata.push_back(rTemp_); cout<<"Keluar? (q/Q = quit) "; cin.getline(pilihan,2); if(pilihan[0] == 'Q' || pilihan[0] =='q'){ break; } cout<<"\n"; } } cout<<"\n\n"; ...

Pengulangan akan berakhir dengan meng-input karakter q/Q. Setelah selesai menambahkan, selanjutnya program mencoba menanyakan apakah ingin pencarian bersifat Case Sensitive (membedakan huruf besar dan kecil)? . Dan program juga akan menanyakan apakah ingin menyimpan hasil replace kedalam file. Berikut potongan kodenya :

... bool bTulis = false, bSen = true; //bSen = boolean (Case) Sensitive if( PanggilFile != NULL) { cout<<"Tidak Case Sensitive? (y/Y = yes) : "; cin.getline(pilihan,2); switch(pilihan[0]){ case 'y': bSen = false; case 'Y': bSen = false; cout<<"** Program tidak Case Sensitive **"; break; default:; } cout<<"\n\nTulis file? (y/Y = yes) : "; cin.getline(pilihan,2); switch(pilihan[0]){ case 'y': bTulis = true; case 'Y': bTulis = true; cout<<"** Program akan menulis **"; break; default:; } cout<<"\n\n"; } string tempTulis = "replace_.txt" + (string)NamaF; ofstream tulisFile(tempTulis.c_str()); //akhir persiapan ...

Pengecekkan kedua string masih sama, tapi disini kita membuatnya sedikit rapi dengan menambah fungsi baru yaitu fungsi "cek" dan fungsi "hurufBesar": ... //fungsi pass by Value, agar nilai aslinya tidak berubah string hurufBesar(string str_) { string temp_; temp_ = ""; for(int d=0;d < str_.length();d++) { //membuat setiap karakter menjadi huruf besar temp_ += toupper(str_[d]); } return temp_; } //pass by Reference, CSen = Case Sensitive void cek(std::string &sTemp_, bool CSen_) { for(int d=0;d < Kata.size();d++){ if (CSen_){ if( sTemp_.compare(Kata[d].Kondisi) == 0){ sTemp_ = Kata[d].Hasil; d = Kata.size(); } } else{ if( hurufBesar(sTemp_).compare( hurufBesar(Kata[d].Kondisi)) == 0){ sTemp_ = Kata[d].Hasil; d = Kata.size(); } } } } ...

Pada fungsi cek terdapat 2 proses pengecekkan yaitu pengecekkan biasa, dan luar biasa! alias non case sensitive hehehehe. Dengan menggunakan toupper (pada fungsi HurufBesar) kita mengubah setiap karakter alphabet menjadi huruf besar. Tentu program ini jauh dari kata sempurna dan penampilannya masih minimalis tanpa ada basis GUI. Akhir kata semoga program ini bermanfaat! And Happy Coding

- Krofz

No comments:

Post a Comment

Maaf jika komentar anda lama terbitnya ^__^, penulis berusaha OL sesering mungkin. Komentar anda adalah semangat blog ini, dan juga semangat para blogger lainnya. You can use XHTML tags: <a href="" rel="link"> </a>, <strong> </strong>, <b> </b>, <em> </em>, <i> </i>.

Spesial character use :
&lt; for <
&gt; for >


Use Pastebin.com for alternative to display your code :) .

 

back to top

back to top