Guest User

Untitled

a guest
Apr 18th, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use DBI;
  4.  
  5. #example running
  6. #csv_load_db.pl Changed.csv pat_regan_combined create_table.sql
  7.  
  8. $host="localhost";
  9. $port=5433;
  10. $db="geopolitical";
  11. $user="foobar";
  12. $pass="guess";
  13.  
  14. $incoming = $ARGV[0];
  15. $table = $ARGV[1];
  16. $create_sql = $ARGV[2];
  17.  
  18. unless(open OUTPUT, $incoming) {&logged("ERROR! Not open $incoming file - $!"); exit;}
  19. @MAIN_DATA = <OUTPUT>;
  20. unless(close OUTPUT) {&logged("ERROR! Not close $incoming file - $!"); exit;}
  21. chomp(@MAIN_DATA);
  22. @headers = split /\s*,\s*/,$MAIN_DATA[0];
  23. shift @MAIN_DATA;
  24.  
  25. $dbh = DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;", $user, $pass, {AutoCommit => 0}) or die $DBI::errstr;
  26.  
  27. &create if $create_sql ne "";
  28.  
  29. $dbh->commit if &insert;
  30.  
  31. $dbh->disconnect;
  32. exit;
  33.  
  34. sub insert
  35. {
  36. foreach my $str (@headers)
  37. {
  38. chomp($str);
  39. $str =~ s/\n|\r//g;
  40. $str = qq~"$str"~;
  41. }
  42. my $fields = lc(join (",",@headers));
  43. foreach my $str (@MAIN_DATA)
  44. {
  45. my $sql = "INSERT INTO $table ($fields) values (";
  46. @tmp = &mysplit("\s*,\s*",$str);
  47. my @values = ();
  48. foreach my $str (@tmp)
  49. {
  50. $str =~ s/\n|\r|\"|\'//g;
  51. if($str eq " " || $str eq "" || $str eq "." || $str eq "!!!") {$str = "NULL"}
  52. elsif($str =~ /^\w{3}([-|\/])(\d{2})$/)
  53. {
  54. my $year=$2;
  55. my $char=$1;
  56. my $mask="Mon".$char."yyyy";
  57. if($2>10){$year+=1900;}
  58. else{$year+=2000;}
  59. $str =~ s/$char$2/$char$year/;
  60. $str = qq~to_date('$str','$mask')~;
  61. }
  62. elsif($str =~ /\d+(.)\d+\1\d{4}/){$str = qq~to_date('$str','dd$1mm$1yyyy')~}
  63. #elsif($str =~ /\d+\/\d+/){$str = qq~to_date('$str','mm/yy')~; print $str."\n";}
  64. elsif($str =~ /^\d+$/){$str = $str;}
  65. else {$str = $dbh->quote($str)}
  66. push @values,$str;
  67. }
  68. $sql.=join(",",@values).")";
  69. $sth=$dbh->prepare($sql);
  70. $sth->execute;
  71. if($DBI::errstr)
  72. {
  73. &logged("\nERROR in sql - $sql\n");
  74. $dbh->rollback;
  75. return 0;
  76. }
  77. }
  78. #$dbh->commit;
  79. print "COMPLETE\n";
  80. return 1;
  81. }
  82.  
  83. sub create
  84. {
  85. unless(open OUTPUT, $create_sql) {&logged("ERROR! Not open $create_sql file - $!"); exit;}
  86. my @SQL = <OUTPUT>;
  87. unless(close OUTPUT) {&logged("ERROR! Not close $create_sql file - $!"); exit;}
  88. chomp(@SQL);
  89. my $sql=lc(join(" ",@SQL));
  90. $dbh->do($sql);
  91. if ($DBI::errstr) {$dbh->rollback;}
  92. else {print "TABLE CREATE!!\n";$dbh->commit;}
  93. return 1;
  94. }
  95.  
  96. sub logged($)
  97. {
  98. my $message = shift;
  99. print $message."\n";
  100. return 1;
  101. }
  102.  
  103. sub mysplit($$)
  104. {
  105. my $sign = shift;
  106. my $str = shift;
  107. my @tmp = split /$sign/,$str;
  108. my @res = ();
  109. my $flag=0;
  110. my $str_add="";
  111. foreach my $el (@tmp)
  112. {
  113. $flag++ if $el =~ /"/;
  114. push @res, $el if !$flag;
  115. if ($flag>0 && $flag<2){$str_add.=$el.", "}
  116. elsif($flag==2)
  117. {
  118. $str_add.=$el;
  119. push @res,$str_add;
  120. $flag=0;
  121. $str_add="";
  122. }
  123. }
  124. return @res;
  125. }
Add Comment
Please, Sign In to add comment