Contoh Manipulasi Data dengan File Text di Perl

sebelumnya baca ini dulu yakz biar tahu kisahnya gimana hehe . .  Nah ternyata yang kemarin itu ada beberapa alasan sehingga developer yang lama enggan menginject data ke table, sehingga dia memberikan solusi berupa pengiriman batch file secara berkala.  filenya ini bentuknya merupakan file txt dengan delimiter berupa ; .

Contoh filenya adalah seperti ini

odol;3;2014-10-10
odol;4;2014-10-10
sabun;10;2014-10-10
sabun;12;2014-10-10

tentu dong scriptnya harus diubah karena tidak sesuai lagi, nah cara ubahnya seperti ini . . .

use DBI;
 
# KONEK DATABASE
 $connect = DBI->connect('dbi:mysql:indi','root','')
 or die "Connection Error: $DBI::errstr\n";
 
#GANTI METODE KARENA TERNYATA MASUKKINNYA LEWAT TEKS
 
#PERTAMA BACA TEXTNYA DULU YA 
#ASUMSI DELIMITERNYA NANTI MENGGUNAKAN TANDA ;
 
open my $data, "<", "file1.txt" or die $!;
# < ARTINYA DIA HANYA READ
# file1.txt ADALAH FILENYA
 
#KALAU BENAR SEHARUSNYA BISA DILOOPING SEPERTI INI 
%arrBarang = ();
while (<$data>) {
	# $_ MERUPAKAN VARIABLE DEFAULT DIMANA IA BERISIKAN TIAP BARIS DALAM FILE1.TXT
	my $currLine = $_;
 
	# SETELAH ITU KITA SPLIT TIAP BARIS JADI SEBUAH ARRAY, ANGGAP SAJA TIAP BARIS ITU SATU ROW / RECORD
 
	@arrRow = split(';',$currLine);
	# ASUMSIKAN LAGI PER KOLOMNYA SUDAH SESUAI
	# CONTOH STRING NYA NANTI MISAL odol;3;2014-10-10
	$barang = $arrRow[0];
	$qty = $arrRow[1];
	#BUAT ASSOCIATIVE ARRAY ( BUAT PENGGANTI SUM )
 
	if (exists $arrBarang{$barang}) {
             # do stuff
             $qty = $arrBarang{$barang} + $qty;
             $arrBarang{$barang} = $qty;
        }else
        {
        	$arrBarang{$barang} = $qty;
        }
 
}
#SAMPAI DISINI SEHARUSNYA KITA UDAH DAPAT ASSOCIATIVE ARRAY, DAN LANGKAH TERAKHIR SAMA SEPERTI SEBELUMNYA
#MEMASUKKAN DATA 
while (($barang, $qty) = each(%arrBarang))
{
	#CARI APAKAH ADA ATAU BELUM BARANGNYA
	$tblTotal = $connect->prepare('SELECT * FROM totalbarang WHERE barang = ?');
	$tblTotal->execute($barang);
	if ($tblTotal->rows > 0)
	{
		$qUpdate = $connect->prepare('UPDATE totalbarang set total = ? WHERE barang = ?');
		$qUpdate->execute($qty, $barang);	
	}
	else
	{
		$qInsert = $connect->prepare('INSERT INTO totalbarang values (null, ? , ?)');
		$qInsert->execute($barang, $qty);	
 
	}
 
}
print "Sukses!";

sumber referensi :

http://www.tizag.com/perlT/

http://www.perlmonks.org/?node_id=2482

Leave a Comment