From Wiki

Perl: Csv2Sql

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&#305; hatal&#305; e-posta adreslerini duzelt.
				$email =~ s/&#304;/i/g; 
				$email =~ s/&#305;/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&#305; �&#305;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);





Retrieved from http://kozgun.net/wiki/pmwiki.php?n=Perl.Csv2Sql
Page last modified on October 13, 2005, at 01:04 AM