Perl /
Csv2SqlBir csv dosyasindaki degerlerin sql sorgusu haline getirilmesi#!/usr/bin/perl -w # Son Degisiklik: 2005.10.13 00:57 # # Bu program bir dizindeki cvs formatindaki dosyalardaki verileri mysql'de bir # tabloya girilecek sekilde ayarlar. # use strict; use Email::Valid; my $dir = "./csv2"; my $sql_dir = "./sql"; my (@files, @tokens); my ($file, $line, $str, $company, $email); my $invalid_emails = "invalid_emails.txt"; my $sql_str = ""; my $sql_file; opendir(IDH, $dir) or die ("$dir acilamadi \n"); # $dir klasorundeki . ve .. haricindeki dosyalari @files # listesine at. Klasorler alinmaz. @files = grep {-f "$dir/$_"} readdir(IDH); # Satirin basindaki ve sonundaki bosluklari cikar. sub trimwhitespace($){ my $string = shift; $string =~ s/^\s+//; $string =~ s/\s+$//; return $string; } #Hatali maillerin yazilacagi dosya. open (INVALID_EMAILS, ">".$invalid_emails) or die "$invalid_emails acilamadi!\n"; foreach $file (@files) { #print $file; #print "\n"; # Dosyayi acip satir satir oku. open(IFH, "$dir/$file") or die "$file acilamadi! \n"; # Yazilacak sql dosyasini ac. $sql_file = "$sql_dir/$file".".sql"; open(OUTPUT, ">$sql_file") or die "$sql_file acilamadi! \n"; $sql_str = "REPLACE INTO emails(email, title) VALUES \n"; #$sql_str = "INSERT IGNORE INTO emails2 ('email', 'title') VALUES \n"; while(<IFH>) { chomp($_); $line = $_; @tokens = split /\|/,$line; my $len = scalar(@tokens); $email = ""; $company = ""; # Eger "|[email protected]" seklinde ise yani # company yoksa. if ($len == 1) { $email = $tokens[0]; $company = $email; } else { $company = $tokens[0]; $email = $tokens[1]; } if ($email =~ /^$/ ) { $email = $company; $company = "YOK"; next ; } # Bosluklari cikar. $email = trimwhitespace($email); my ($x, $y); $x = 0; # Bazi eposta adresilerinde "," var, onlari temizle. if ($email =~ /,/) { $x = index($email, ','); $email = substr $email, 0, $x; } # Bazi eposta adresilerinde ";" var, onlari temizle. if ($email =~ /;/) { $x = index($email, ';'); $email = substr $email, 0, $x; } # Bazi eposta adresilerinde " " var, onlari temizle. if ($email =~ / /) { $x = index($email, ' '); $email = substr $email, 0, $x; } # Bastaki ve sondaki bosluklari cikar. $email = trimwhitespace($email); # Bazı hatalı e-posta adreslerini duzelt. $email =~ s/İ/i/g; $email =~ s/ı/i/g; $email =~ s/�/c/g; $email =~ s/�/u/g; $email =~ s/�/o/g; # Satir sonlarindaki "." lari sil. $email =~ s/\.$//g; # e-posta adreslerini kucuk harf yap. $email = lc $email; # company'de tirnaklardan kurtulalim. $company =~ s/'/\\'/g; # company'deki "YOK"ları �ıkar. $company =~ s/YOK//g; # E-posta adresinin gecerliligini kontrol et. if( Email::Valid->address($email) ) { $sql_str .= "('$email', '$company'),\n"; } else { print INVALID_EMAILS $email,"\n"; } } # sondaki "," sil. $sql_str = substr $sql_str, 0, -2; # sql dosyasina olusuturulan sorguyu yaz. print OUTPUT $sql_str; # sql dosyasini kapat. close(OUTPUT); # csv dosyasini kapat. close(IFH); } closedir(IDH); close(INVALID_EMAILS); |