Monday, 6 April 2015

DELPHI7 :: Memanipulasi Data dengan File Teks



Layaknya database, file teks juga bisa digunakan untuk menyimpan data-data yang sifatnya sederhana dan tidak membutuhkan record yang banyak. Namun, hal ini tidak dianjurkan dalam mengerjakan suatu sistem yang rumit. Inilah yang membedakan penggunaan file teks dengan database.
Pada dasarnya, proses penyimpanan terdiri dari tambah data, ubah data, dan hapus data. Tidak seperti pada aplikasi database yang memiliki perintah khusus untuk menjalankan proses penyimpanan tersebut secara langsung, pada aplikasi fileteks tidak menyediakan perintah-perintah tersebut. Melainkan, programmer harus pintar-pintar merumuskan algoritma atau source code-nya dengan syntax yang ada.
Jika kita menggunakan bahasa pemrograman delphi, maka akan ada syntax yang sangat membantu kita dalam melakukan proses penyimpanan data tersebut pada file teks. Dengan menggunakan type...record dan menginisialisasikan suatu variabel ke dalam array satu dimensi untuk dapat dipindahkan data secara otomatis ke dalam file teks. Untuk kasus seperti ini, saya tidak menggunakan bahasa pemrograman delphi karena contoh source code seperti itu sudah banyak tersedia di internet untuk referensinya. Salah satu alasan yang membuat saya tertantang untuk mencobanya dengan menggunakan bahasa pemrograman java karena belum ada saya temukan referensi yang lengkap untuk menjawab kasus penyimpanan data pada file teks layaknya database seperti insert, edit, delete.
Biar lebih memudahkan pembaca dalam memahaminya, sebelumnya saya akan berikan studi kasus sebagai berikut. Suatu data dalam tabel memiliki field atau kolom seperti No_Id, Jns_Id, Nama, Alamat, jk. Masing-masing field tersebut diberikan ukuran atau panjang data secara berurut 17,5,32,52,15,7. Nama file teks diberikan adalah "Data Penyewa.txt". Maka, akan dibuat suatu proses insert, edit, dan delete. Adapun tips dan triknya sebagai berikut :
  1. Insert (Tambah Data)
  2. Prinsip yang digunakan dalam proses insert data ini adalah dengan melakukan pembacaan terlebih dahulu terhadap data yang ada pada file teks "Data Penyewa.txt kemudian menyimpan data yang dibaca tersebut pada file teks yang baru. Misal, "Data Penyewa temp.txt" secara sementara. Kemudian menggabungkan secara bersamaan data yang ada dari file teks yang baru tadi dengan data baru.
    1. public static void Insert ()  
    2. {  
    3. //variabel data  
    4. String no_id, jns_id, nama, alamat, telp, jk;  
    5.   
    6. //objek inputan dari keyboard  
    7. Scanner input = new Scanner (System.in);  
    8.   
    9. //input data dari keyboard  
    10. System.out.print("No Id = ");  
    11. no_id = input.nextLine();  
    12. System.out.print("Jenis Id (KTP/SIM) = ");  
    13. jns_id = input.nextLine();  
    14. System.out.print("Nama = ");  
    15. nama = input.nextLine();  
    16. System.out.print("Alamat = ");  
    17. alamat = input.nextLine();  
    18. System.out.print("No. Telp = ");  
    19. telp = input.nextLine();  
    20. System.out.print("Jenis Kelamin (Pria/Wanita) = ");  
    21. jk = input.nextLine();  
    22.   
    23. //kondisi jika panjang karakter melebihi batas  
    24. if ((no_id.length()<=pjg_data[0]) &&  
    25. (jns_id.length()<=pjg_data[1]) &&  
    26. (nama.length()<=pjg_data[2]) &&  
    27. (alamat.length()<=pjg_data[3]) &&  
    28. (telp.length()<=pjg_data[4]) &&  
    29. (jk.length()<=pjg_data[5]))  
    30. {  
    31.   //Copy file asal ke file baru (temporary)  
    32.   CopyTextFile("Data Penyewa.txt","Data Penyewa temp.txt");  
    33.   //mulai file teks  
    34.   try {  
    35.        FileWriter newFile = new FileWriter("Data Penyewa.txt");  
    36.        PrintWriter out = new PrintWriter(newFile);  
    37.     
    38.        //jika data pada file temporary tidak null maka salin  
    39.        //data file temporary ke file asal  
    40.        if (ReadTextFile("Data Penyewa temp.txt")!= null)  
    41.           out.print(""+ReadTextFile("Data Penyewa temp.txt"));  
    42.   
    43.        //inputkan data baru ke file teks asal  
    44.        out.print(""+no_id);  
    45.        for (int i=0; i<(pjg_data[0]-no_id.length()); i++)  
    46.        {  
    47.           out.print(" ");  
    48.        }  
    49.        out.print(""+jns_id);  
    50.        for (int i=0; i<(pjg_data[1]-jns_id.length()); i++)  
    51.        {  
    52.            out.print(" ");  
    53.        }  
    54.        out.print(""+nama);  
    55.        for (int i=0; i<(pjg_data[2]-nama.length()); i++)  
    56.        {  
    57.           out.print(" ");  
    58.        }  
    59.        out.print(""+alamat);  
    60.        for (int i=0; i<(pjg_data[3]-alamat.length()); i++)  
    61.        {  
    62.           out.print(" ");  
    63.        }  
    64.        out.print(""+telp);  
    65.        for (int i=0; i<(pjg_data[4]-telp.length()); i++)  
    66.        {  
    67.           out.print(" ");  
    68.        }  
    69.        out.print(""+jk);  
    70.        for (int i=0; i<(pjg_data[5]-jk.length()); i++)  
    71.        {  
    72.           out.print(" ");  
    73.        }  
    74.        out.println();  
    75.        //tutup operasi file teks, data tidak tersimpan  
    76.        //jika tidak di-includ-kan code di bawah ini.  
    77.        out.flush();  
    78.        out.close();  
    79.        //pesan tersimpan  
    80.        System.out.println("Data Telah Disimpan");  
    81.        System.out.println();  
    82.     } catch (IOException e) {  
    83.            e.printStackTrace();//eksepsi error handling  
    84.            }//akhir fileteks  
    85.   }  
    86.   else {  
    87.       //pesan  
    88.       System.out.println("Inputan ada yang melebihi batas");  
    89.   }  
    90. }  
    1. public static void CopyTextFile (String filenamereader, String filenamewriter)  
    2. {  
    3. try {   
    4.    final BufferedReader br =  
    5.    new BufferedReader(new FileReader(filenamereader));  
    6.    final BufferedWriter bw =  
    7.    new BufferedWriter(new FileWriter(filenamewriter));  
    8.    final PrintWriter  pw =  
    9.    new PrintWriter (bw);  
    10.   
    11.    // Read input stream line by line  
    12.    while (true) {  
    13.         final String line = br.readLine(); // get next line  
    14.         if (line==nullbreak// exit when end-of-file  
    15.         pw.println (line); // write line  
    16.    }  
    17.    br.close();      
    18.    pw.close();  
    19. catch (IOException ex) {  
    20.      System.err.println(ex);  
    21. }  
    22. }  
    1. public static String ReadTextFile (String filename) {  
    2.   File file = new File(filename);  
    3.   StringBuffer contents = new StringBuffer();  
    4.   BufferedReader reader = null;  
    5.   
    6.   try {  
    7.       reader = new BufferedReader(new FileReader(file));  
    8.       String text = null;  
    9.     
    10.       // ulangi sampai semua baris terbaca  
    11.       while ((text = reader.readLine()) != null) {  
    12.       contents.append(text)  
    13.       .append(System.getProperty("line.separator"));  
    14.       }  
    15.  } catch (FileNotFoundException e) {  
    16.      e.printStackTrace();  
    17.  } catch (IOException e) {  
    18.      e.printStackTrace();  
    19. finally {  
    20.      try {  
    21.         if (reader != null) {  
    22.            reader.close();  
    23.         }  
    24.      } catch (IOException e) {  
    25.          e.printStackTrace();  
    26.      }  
    27.  }  
    28.   
    29.   // tampilkan isi file  
    30.   return contents.toString();  
    31. }  
  3. Edit (Ubah Data)
  4. Delete (Hapus Data)
  5. Prinsip metode penghapusan data pada file teks disini dengan memanggil data array dua dimensi yang telah didefenisikan dan diisi berdasarkan data pada file asal. Record yang ingin dihapus atau dibuang tidak diikutsertakan dalam menginputkan data array dua dimensi tersebut ke dalam file teks. Hal ini sama halnya dalam proses input data baru.
    1. public static void Delete(int no_urut)  
    2. {  
    3. try {  
    4. FileWriter newFile = new FileWriter("Data Penyewa.txt");  
    5. PrintWriter out = new PrintWriter(newFile);  
    6. for (int i=0; i<N; i++)  
    7. {  
    8. if (i!=no_urut-1)  
    9. {  
    10. //inputkan data baru ke file teks asal  
    11.    out.print(""+newdata[i][0]);  
    12.        for (int j=0; j<(pjg_data[0]-newdata[i][0].length()); j++)  
    13.        {  
    14.           out.print(" ");  
    15.        }  
    16.        out.print(""+newdata[i][1]);  
    17.        for (int j=0; j<(pjg_data[1]-newdata[i][1].length()); j++)  
    18.        {  
    19.            out.print(" ");  
    20.        }  
    21.        out.print(""+newdata[i][2]);  
    22.        for (int j=0; j<(pjg_data[2]-newdata[i][2].length()); j++)  
    23.        {  
    24.           out.print(" ");  
    25.        }  
    26.        out.print(""+newdata[i][3]);  
    27.        for (int j=0; j<(pjg_data[3]-newdata[i][3].length()); j++)  
    28.        {  
    29.           out.print(" ");  
    30.        }  
    31.        out.print(""+newdata[i][4]);  
    32.        for (int j=0; j<(pjg_data[4]-newdata[i][4].length()); j++)  
    33.        {  
    34.          out.print(" ");  
    35.        }  
    36.        out.print(""+newdata[i][5]);  
    37.        for (int j=0; j<(pjg_data[5]-newdata[i][5].length()); j++)  
    38.        {  
    39.           out.print(" ");  
    40.        }  
    41.           out.println();  
    42. }  
    43. }  
    44. //tutup operasi file teks, data tidak tersimpan  
    45.   //jika tidak di-includ-kan code di bawah ini.  
    46.   out.flush();  
    47.   out.close();  
    48.   //pesan terhapus  
    49.   System.out.println("Data Telah Dihapus");  
    50.   System.out.println();  
    51. catch (IOException e) {  
    52.           e.printStackTrace();//eksepsi error handling  
    53. }//akhir fileteks  
    54. }  
  6. View (Tampil Data)
  7. Bagaimana proses menampilkan data-data yang ada pada file teks? Pertama, langkah yang harus dilakukan adalah mengecek berapa banyak record atau baris data yang tersedia. Berdasarkan record-record tersebut, data diambil sesuai dengan ukran karakter yang tersedia pada masing-masing field. Dan ditampung dalam array dua dimensi yang baru. Dalam hal ini, pembacaan karakter jangan sampai salah karena dapat mempengaruhi program alias error. Jika program error, cobalah cek methode yang memanggil data pada file teks tersebut dan menyimpannya ke dalam array dua dimensi.
    1. public static void View()  
    2. {  
    3.   CheckLineText("Data Penyewa.txt");  
    4.   GetData(pjg_data);  
    5.     
    6.   for (int i=0; i<N; i++)  
    7.   {  
    8.      for (int j=0; j<M+1; j++)  
    9.      {  
    10.   String teks = newdata[i][j];  
    11.   System.out.print(""+teks);  
    12.      }  
    13.      System.out.println("");  
    14.   }  
    15.   System.out.println("");   
    16. }  
    1. public static void CheckLineText (String filename) {  
    2.     File file = new File(filename);  
    3.     StringBuffer contents = new StringBuffer();  
    4.     BufferedReader reader = null;  
    5.   
    6.     try {  
    7.          reader = new BufferedReader(new FileReader(file));  
    8.          String text = null;  
    9.           
    10.          // ulangi sampai semua baris terbaca  
    11.          int i=0;  
    12.          while ((text = reader.readLine()) != null) {  
    13.              data[i]=text;  
    14.              i=i+1;  
    15.          }  
    16.          N = i;//banyak record  
    17.     } catch (FileNotFoundException e) {  
    18.         e.printStackTrace();  
    19.     } catch (IOException e) {  
    20.         e.printStackTrace();  
    21.     } finally {  
    22.         try {  
    23.             if (reader != null) {  
    24.                reader.close();  
    25.             }  
    26.         } catch (IOException e) {  
    27.             e.printStackTrace();  
    28.         }  
    29.     }  
    30.   
    31. }  
    1. public static void GetData(int arr[])  
    2. {  
    3.    int tot_pjg=0;  
    4.    // cari panjang total teks  
    5.    for (int value : arr)  
    6.        tot_pjg = tot_pjg+value;  
    7.          
    8.    String str = "", teks="";  
    9.   
    10.    for (int i=0; i<N; i++)  
    11.    {  
    12.       teks = data[i];// isi variabel string dgn array  
    13.       //inisialisasi  
    14.       int j=0, k=0, jum=0;  
    15.       jum = jum+arr[j];  
    16.       // kelompokkan data berdasarkan field/kolom  
    17.       while (k<tot_pjg)  
    18.       {      
    19.   if (k==jum)  
    20.     {  
    21.        newdata[i][j] = str;  
    22.        str="";  
    23.        j=j+1;  
    24.        jum = jum+arr[j];   
    25.     }  
    26.     str = str + teks.charAt(k);  
    27.     k=k+1;  
    28.       }  
    29.       M=j;  
    30.       //i menyatakan baris, j menyatakan kolom  
    31.       //data ditampung dalam array dua dimensi  
    32.       newdata[i][j] = str;  
    33.       str="";  
    34.    }   
    35. }  

No comments:

Post a Comment