Insert file berekstensi .dat kedalam database
Saya sudah dapat menjalankan import file .dat kedalam tabel di database. Yang jadi masalah bagaimana cara membedakan pemisah (explode) menggunakan "spasi" dengan "tabulasi". File .dat saya menggunakan 2 macam pemisah tersebut. yang jadi permasalah adalah pemisah "tabulasi" tersebut, sehingga kalimat sebelum tabulasi dengan sesudahnya ter-record didalam 1 kolom.
berikut file .dat yang saya miliki,
sehingga apabila saya insert into tabel, maka yang masuk kedalam tabel seperti berikut,
Berikut adalah script php yang saya gunakan,
apakah ada saran selain penggunaan explode() ? seperti preg_split() atau str_split() atau str_word_count() atau yang lainnya?
berikut file .dat yang saya miliki,
1001 2021-01-05 11:36:13 1 0 1 0 1001 2021-01-05 11:37:44 1 0 1 0 1001 2021-01-05 11:45:43 1 0 1 0 1001 2021-01-05 11:46:19 1 0 16 0 1001 2021-01-05 11:46:51 1 0 2 0
sehingga apabila saya insert into tabel, maka yang masuk kedalam tabel seperti berikut,
1001 2021-01-05perhatikan pada angka 1001 dengan 2021-01-05 dipisahkan dengan tabulasi pada file .dat nya sehingga setelah terecord di tabel ditempatkan didalam 1 kolom yang sama, tidak terpisah ke masing-masing kolom yang ditentukan.
Berikut adalah script php yang saya gunakan,
<?php include "../../koneksi.php"; //Upload File if (isset($_POST['submit'])) { if (is_uploaded_file($_FILES['filename']['tmp_name'])) { } $handle = fopen($_FILES['filename']['tmp_name'], "r"); if ($handle) { $hostname1 = 'localhost'; $username1 = 'root'; $password1 = 'rootroot'; $database1 = 'simp'; $con = mysqli_connect($hostname1, $username1, $password1, $database1); //$con = new mysqli($db_hostname, $db_username, $db_password, $db_databasename); while (($line = fgets($handle)) !== false) { // process the line read. $line_exp = explode(" ", $line); foreach($line_exp as $row){ $row = explode(' ',$row); foreach($row as $cell){ echo $cell; $userid = $line_exp[5]; $tanggal = $line_exp[1]; $jam = $line_exp[2]; $uid = $line_exp[3]; $role = $line_exp[4]; $jenis = $line_exp[5]; $pass = $line_exp[6]; $stmt = $con->prepare("INSERT into upload_tb(userid, tanggal, jam, uid, role, jenis, pass) values(?,?,?,?,?,?,?)"); $stmt->bind_param("sssssss", $userid, $tanggal, $jam, $uid, $role, $jenis, $pass); $stmt->execute(); } } } $stmt->close(); fclose($handle); } else { // error opening the file. } } $aksi="module/upload/upload_aksi.php"; switch($_GET[aksi]){ default: ?>pada codingan diatas, saya coba tambahkan foreach untuk spasi dan tabulasi tetapi tidak berguna/hasil masih seperti yang sebelumnya.
apakah ada saran selain penggunaan explode() ? seperti preg_split() atau str_split() atau str_word_count() atau yang lainnya?
- saya kurang paham. Yang sekarang terjadi apa? dan yang dimau apa? boleh kasih contoh kondisi tabel sekarang - @hilmanski
atau respon:
Jawaban
saya sudah ketemu dengan solusinya,
ganti script berikut,
Inti nya saya menggunakan substr() dikarenakan file .dat tidak menggunakan pemisah yang berkarakter didalam file tersebut, hanya menggunakan spasi atau tabulasi sehingga kita harus menghitung mulai karakter keberapa hingga berapa banyak karakter yang diinginkan, berbeda dengan file .csv yang didalam file memiliki pemisah yang berkarakter seperti koma(,) ataupun titik koma(;)
ganti script berikut,
while (($line = fgets($handle)) !== false) { // process the line read. $line_exp = explode(" ", $line); foreach($line_exp as $row){ $row = explode(' ',$row); foreach($row as $cell){ echo $cell; $userid = $line_exp[5]; $tanggal = $line_exp[1]; $jam = $line_exp[2]; $uid = $line_exp[3]; $role = $line_exp[4]; $jenis = $line_exp[5]; $pass = $line_exp[6]; $stmt = $con->prepare("INSERT into upload_tb(userid, tanggal, jam, uid, role, jenis, pass) values(?,?,?,?,?,?,?)"); $stmt->bind_param("sssssss", $userid, $tanggal, $jam, $uid, $role, $jenis, $pass); $stmt->execute(); } } }sehingga menjadi berikut,
while (($line = fgets($handle)) !== false) { // process the line read. $userid= substr($line, 5, 4); $tanggal = substr($line, 10, 10); $jam = substr($line, 21, 8); $uid = substr($line, 30, 1); $role = substr($line, 32, 1); $jenis = substr($line, 34, 2); $pass = substr($line, 37, 1); $stmt = $con->prepare("INSERT into upload_tb(userid, tanggal, jam, uid, role, jenis, pass) values(?,?,?,?,?,?,?)"); $stmt->bind_param("sssssss", $userid, $tanggal, $jam, $uid, $role, $jenis, $pass); $stmt->execute(); }
Inti nya saya menggunakan substr() dikarenakan file .dat tidak menggunakan pemisah yang berkarakter didalam file tersebut, hanya menggunakan spasi atau tabulasi sehingga kita harus menghitung mulai karakter keberapa hingga berapa banyak karakter yang diinginkan, berbeda dengan file .csv yang didalam file memiliki pemisah yang berkarakter seperti koma(,) ataupun titik koma(;)
Login untuk gabung berdiskusi
Pertanyaan Lainnya
Top Kontributor
- @ahanafi
795 Kontribusi 523 Poin
- @Nandar
647 Kontribusi 204 Poin
- @dianarifr
642 Kontribusi 316 Poin
- @Saputroandhi
509 Kontribusi 162 Poin
- @dodipsitorus
412 Kontribusi 145 Poin