Bir 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);