How to read: sebuah field dari suatu table yang berisi "file_trxn.text" menggunakan PHP&SQL?

Contoh Kasus: Saya ingin melakukan parsing sebuah file text yang berisi data transaksi, setiap baris data transaksi memiliki kode unik. Saya ingin membaca dan cek data tersebut per baris dari awal sampe akhir, lalu di ubah menjadi array dan kemudian data tersebut di post ke database untuk melakukan updating data jika data transaksi valid maka status keluarannya samadengan "Success", selain itu jika data tidak valid maka statusnya "Rejected".

Saya baru belajar PHP& SQL, mohon arahannya... semoga ilmu Anda menjadi amal ibadah dan berkah bagi kita semua. Terimakasih

avatar adiernes
@adiernes

24 Kontribusi 0 Poin

Diperbarui 6 tahun yang lalu

3 Jawaban:

Coba tampilkan contoh textnya dalam 1 baris. Minimal 2 baris biar kita bisa lihat patternnya, misalnya:


// Baris pertama
Buah: mangga, jeruk, anggur
// Baris kedua
Benda: buku, tas, meja

Sejauh ini kode agan seperti apa?

avatar onirusama
@onirusama

265 Kontribusi 184 Poin

Dipost 6 tahun yang lalu



//File Controller
 public function readfile(){

        $file = file_get_contents("./dataparse_bri/KAIKMT0120170428204132.txt");

        if($file)
        {

            $remove = "\n";
            $array[] = null;
            $tab = "\t";

            $pemisah = explode($remove, $file);
            foreach ($pemisah as $string)
            {
              $baris = explode($tab, $string);
              array_push($array, $baris);
            }
              echo "";
              print_r($array);
              echo "";

        }else{
          echo "Data tidak ditemukan!";
        }

         $this->load->view('ok');
      }

Output dari 1 file.txt tersebut terdiri dari beberapa data transaksi, sbb:

[0]000001754600000039559601FFF8302865C363252207040000B301
[1]000001754600000039559601FFF8302865C363252207040000B302
[2]000001754600000039559601FFF8302865C363252207040000B303
[3]000001754600000039559601FFF8302865C363252207040000B304
[4]000001754600000039559601FFF8302865C363252207040000B305
[5]000001754600000039559601FFF8302865C363252207040000B301

Masih sampai sini, belum proses query update (insert) ke field status untuk check data transaksinya. Ane rencana ganti algoritma dengan cara membaca file text tersebut langsung menggunakan query via database soalnya agar prosesnya pembacaan dan matching datanya cepat.

Bayangkan jika setiap ada ratusan atau ribuan transaksi proses pengecekan sistem dilakukan dengan membuka file satu persatu mungkin butuh sedikit waktu agak lama.

Terimakasih :)

avatar adiernes
@adiernes

24 Kontribusi 0 Poin

Dipost 6 tahun yang lalu

ada fungsi fgets() untuk baca file per barisnya kita bisa gunakan itu. Memang kalau kita lakukan pembacaan baris per baris kemudian melakukan insert data ini pasti butuh waktu yg lama. Karena jumlah query sql yg kita eksekusi sama banyak dengan jumlah baris yg ada di file txt. Jadi kalau barisnya 1000 maka querynya juga 1000 pastinya butuh waktu yg lama. Nah untuk mengakalinya, kita bisa menampung dulu valuenya sementara, kemudian nanti diimplode menjadi string. Kemudian dieksekusi dengan 1 query saja.

Saya belum terlalu paham bentuk datanya pada setiap baris di file txtnya, saya asumsikan begini:


// ini asumsi saya mengenai tiap baris di file txt
data_input_1       data_output_1
data_input_2       data_output_2
data_input_3       data_output_3
// dan seterusnya
// antara data_input dan data_output ada pemisah tab("\t")
// antara baris satu dan baris lainnya ada pemisah baris("\n")
// target yg ingin dicapai menginsert data2 perbaris tersebut ke dalam table database

// Oh iya satu lagi, anggaplah tablenya seperti ini
=======================================
|  id  |  data_input  |  data_output  |


Jika memang kasusnya seperti di atas silahkan eksekusi dengan metode berikut:


<?php
   // ini optional kita lakukan untuk menghitung lama eksekusi
   $time1 = microtime(true);

   // buat koneksi
   $connection = mysqli_connect('localhost', 'root', 'root', 'bank');
   if(!$connection) die('gagal connect');

   $handle   = fopen('sample_transaksi.txt', 'r');
   $all_line = [];

   if($handle) {
      while (($line = fgets($handle)) !== false) {
         $current_line = explode("\t", $line);
         $all_line[] = "('{$current_line[0]}', '{$current_line[1]}')";
      }

      $values = implode(", ", $all_line);

      $sql = "INSERT INTO transaksi (data_input, data_output) VALUES {$values}";
      mysqli_query($connection, $sql);

      fclose($handle);
   }else{
      die('file tidak ditemukan!');
   }

   $time2 = microtime(true);
   echo '<br><hr><br>Waktu eksekusi: ' . ($time2 - $time1);
?>

avatar onirusama
@onirusama

265 Kontribusi 184 Poin

Dipost 6 tahun yang lalu

Login untuk ikut Jawaban