/[registar]/convert.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /convert.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (vendor branch)
Tue Jun 12 08:38:53 2001 UTC (22 years, 10 months ago) by ravilov
Branch: pliva
CVS Tags: r0
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
initial import

1 ravilov 1.1 #! /usr/local/bin/perl -w
2     use strict;
3     $| = 1;
4    
5     my $debug = 0;
6     my $raise = 1;
7     my $log = "log";
8     my $xbase = "./registar";
9     my $db = "registar";
10    
11     open(LOG, ">$log") || die "can't open log: $!";
12    
13     use DBI;
14     my $xbdbh = DBI->connect("DBI:XBase:$xbase", "", "",
15     { 'RaiseError' => $raise }) || die $DBI::errstr;
16     my $pgdbh = DBI->connect("DBI:Pg:dbname=$db", "dpavlin", "",
17     { 'RaiseError' => $raise }) || die $DBI::errstr;
18     # $SIG{'__WARN__'} = sub { }; # inhibit DBI warnings.
19    
20     my @tables = ();
21     if (@ARGV > 0) {
22     push(@tables, @ARGV);
23     } else {
24     push(@tables, <$xbase/*.dbf>);
25     # Sto da radim sa ovima?
26     #push(@tables, <$xbase/*.slk>);
27     #push(@tables, <$xbase/*.sylk>);
28     # OLD GLOBBING METHOD
29     # opendir(DIR, $xbase) || die "can't open dir $xbase";
30     # @tables = grep { /\.dbf/i || /\.slk/i || /\.sylk/i } readdir(DIR);
31     # closedir(DIR);
32     }
33    
34     sub ConvertDate {
35     my ($dt) = @_;
36     if ($dt =~ m,^([12][09]\d\d)([0-1]\d)([0-3]\d)$,) {
37     $dt = ($2 < 1 || $2 > 12 || $1 < 1900 || $3 > 31) ? undef : "$1-$2-$3";
38     } elsif ($dt =~ m,^([12][09]\d\d)([0-1]\d)$,) {
39     $dt = ($2 >= 1 && $2 <= 12) ? "$1-$2-01" : "$1-01-01";
40     } elsif ($dt =~ m,^([12][09]\d\d)$,) {
41     $dt = "$1-01-01";
42     } else {
43     print STDERR "datum? ($dt) [nuke]\n";
44     # $dt = "NULL";
45     $dt = undef;
46     }
47     return $pgdbh->quote($dt);
48     }
49    
50     sub ConvertBool {
51     my ($b) = @_;
52     $b ||= 0;
53     $b = ($b != 0) ? "true" : "false";
54     return $b;
55     }
56    
57     sub ConvertString {
58     my $str = join("\n", @_);
59     $str =~ s/(^[\x00-\x1F]+|[\x00-\x1F]+$)//gs;
60     $str =~ s/\s*\x8D?\s*\r?\s*\n\s*/\n/gs;
61     $str =~ s/(^\s+|\s+$)//gs;
62     $str =~ s/(^"|"$)//g;
63     # char recoding
64     #$str =~ s/&#273;/ð/g;
65     #$str =~ s/&#269;/è/g;
66     #$str =~ s/ý/¾/g;
67     $str =~ tr/{|`~}[\\@^]/¹ð¾èæ©Ð®ÈÆ/;
68     return $pgdbh->quote($str);
69     }
70    
71     sub Progress {
72     my ($count, $total) = @_;
73     return sprintf("%6.2f%%", ($count * 100 / scalar($total)))." done.\r";
74     }
75    
76     sub Log {
77     my $msg = join("\n", @_);
78     print LOG "$msg\n";
79     return "$msg\n";
80     }
81    
82     sub tblATK {
83     my ($table, $fields, $data) = @_;
84     my $count = 0;
85     my $sth = $pgdbh->prepare("INSERT INTO atk_inn (sifra, naziv, razno) VALUES (?, ?, ?)");
86     unless ($sth) {
87     print &Log("[$table-prepare] ".$pgdbh->errstr);
88     return 0;
89     }
90     my $refresh = 0;
91     foreach my $row (@$data) {
92     my ($sifra, $naziv, $razno) = @$row;
93     $sifra = &ConvertString($sifra);
94     $naziv = &ConvertString($naziv);
95     $razno = &ConvertString($razno);
96     my $tmp = $sth->execute($sifra, $naziv, $razno);
97     unless (defined($tmp)) {
98     print &Log("[$table-execute] ".$pgdbh->errstr);
99     next;
100     }
101     $tmp ||= 0;
102     $tmp = 0 if ($tmp < 0);
103     $count += $tmp;
104     if (++$refresh >= 20) {
105     $refresh = 0;
106     print Progress($count, scalar(@$data));
107     }
108     }
109     $sth->finish();
110     return $count;
111     }
112    
113     sub tblDFZupa {
114     my ($table, $fields, $data) = @_;
115     my $count = 0;
116     my $sth = $pgdbh->prepare("INSERT INTO zupanije (broj, naziv, centar, pos_broj, npos_broj, spos_broj, grad, zip) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
117     unless ($sth) {
118     print &Log("[$table-prepare] ".$pgdbh->errstr);
119     return 0;
120     }
121     my $refresh = 0;
122     foreach my $row (@$data) {
123     my ($broj, $naziv, $centar, $pos_broj, $npos_broj,
124     $spos_broj, $grad, $zip, $grad_i) = @$row;
125     $broj += 0; # force numeric
126     $naziv = &ConvertString($naziv);
127     $centar = &ConvertString($centar);
128     $pos_broj = &ConvertString($pos_broj);
129     $npos_broj = &ConvertString($npos_broj);
130     $spos_broj = &ConvertString($spos_broj);
131     $grad = &ConvertString($grad);
132     $zip = &ConvertString($zip);
133     my $tmp = $sth->execute($broj, $naziv, $centar,
134     $pos_broj, $npos_broj, $spos_broj,
135     $grad, $zip);
136     unless (defined($tmp)) {
137     print &Log("[$table-execute] ".$pgdbh->errstr);
138     next;
139     }
140     $tmp = 0 if ($tmp < 0);
141     $count += $tmp;
142     if (++$refresh >= 20) {
143     $refresh = 0;
144     print Progress($count, scalar(@$data));
145     }
146     }
147     $sth->finish();
148     return $count;
149     }
150    
151     sub tblINN {
152     return &tblATK(@_);
153     }
154    
155     sub tblLijek {
156     my ($table, $fields, $data) = @_;
157     # ...
158     return 0;
159     }
160    
161     sub tblProiz {
162     my ($table, $fields, $data) = @_;
163     my $count = 0;
164     my $sth = $pgdbh->prepare("INSERT INTO proizvodjaci (sifra, naziv, drzava, zastupnistvo, mjesto, zip, ulica_i_broj, razno, telefon, fax) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
165     unless ($sth) {
166     print &Log("[$table-prepare] ".$pgdbh->errstr);
167     return 0;
168     }
169     my $refresh = 0;
170     foreach my $row (@$data) {
171     my ($sifra, $naziv, $drzava, $zastupnistvo, $zip, $mjesto,
172     $ulica_i_broj, $razno, $tel, $fax) = @$row;
173     $sifra += 0; # force numeric
174     $naziv = &ConvertString($naziv);
175     $drzava = &ConvertString($drzava);
176     $zastupnistvo = &ConvertString($zastupnistvo);
177     $zip = &ConvertString($zip);
178     $mjesto = &ConvertString($mjesto);
179     $ulica_i_broj = &ConvertString($ulica_i_broj);
180     $razno = &ConvertString($razno);
181     $tel = &ConvertString($tel);
182     $fax = &ConvertString($fax);
183     my $tmp = $sth->execute($sifra, $naziv, $drzava,
184     $zastupnistvo, $zip, $mjesto, $ulica_i_broj,
185     $razno, $tel, $fax);
186     unless (defined($tmp)) {
187     print &Log("[$table-execute] ".$pgdbh->errstr);
188     next;
189     }
190     $tmp = 0 if ($tmp < 0);
191     $count += $tmp;
192     if (++$refresh >= 20) {
193     $refresh = 0;
194     print Progress($count, scalar(@$data));
195     }
196     }
197     $sth->finish();
198     return 0;
199     }
200    
201     sub tblVodeca {
202     my ($table, $fields, $data) = @_;
203     my $count = 0;
204     my $sth = $pgdbh->prepare("INSERT INTO vodeca (sifra, naziv) VALUES (?, ?)");
205     unless ($sth) {
206     print &Log("[$table-prepare] ".$pgdbh->errstr);
207     return 0;
208     }
209     my $refresh = 0;
210     foreach my $row (@$data) {
211     my ($sifra, $naziv) = @$row;
212     $naziv = &ConvertString($naziv);
213     $drzava = &ConvertString($drzava);
214     $zastupnistvo = &ConvertString($zastupnistvo);
215     $zip = &ConvertString($zip);
216     $mjesto = &ConvertString($mjesto);
217     $ulica_i_broj = &ConvertString($ulica_i_broj);
218     $razno = &ConvertString($razno);
219     $tel = &ConvertString($tel);
220     $fax = &ConvertString($fax);
221     my $tmp = $sth->execute($sifra, $naziv, $drzava,
222     $zastupnistvo, $zip, $mjesto, $ulica_i_broj,
223     $razno, $tel, $fax);
224     unless (defined($tmp)) {
225     print &Log("[$table-execute] ".$pgdbh->errstr);
226     next;
227     }
228     $tmp = 0 if ($tmp < 0);
229     $count += $tmp;
230     if (++$refresh >= 20) {
231     $refresh = 0;
232     print Progress($count, scalar(@$data));
233     }
234     }
235     $sth->finish();
236     # ...
237     return 0;
238     }
239    
240     my (%dbf) = (
241     "atk" => \&tblATK,
242     "atkstr" => undef,
243     "boja" => undef,
244     "dfzupa" => \&tblDFZupa,
245     "inn" => \&tblINN,
246     "innstr" => undef,
247     "lijek" => \&tblLijek,
248     "lijstr" => undef,
249     "proiz" => \&tblProiz,
250     "prostr" => undef,
251     "registar" => undef,
252     "regstr" => undef,
253     "strukt" => undef,
254     "vodeca" => \&tblVodeca
255     );
256    
257     ### MAIN
258     foreach my $table (@tables) {
259     next unless ($table =~ s/\.dbf$//i);
260     $table =~ s,^.+/([^/]+),$1,;
261     unless (exists($dbf{$table})) {
262     print "[WARNING: Don't know what to do with table \"$table\"!]\n\n";
263     next;
264     }
265     unless (defined($dbf{$table})) {
266     print "[WARNING: Ignoring table \"$table\"]\n\n";
267     next;
268     }
269     print &Log("Working on \"$table\"...");
270     my $sql = "SELECT * FROM $table";
271     my $sth = $xbdbh->prepare($sql) || die "[$sql] ".$xbdbh->errstr();
272     $sth->execute() || die "[$sql] ".$sth->errstr();
273     my @names = @{$sth->{'NAME'}};
274     my @types = @{$sth->{'TYPE'}};
275     if ($debug) {
276     print STDERR "\n#-- \"$table\" structure\n";
277     for (my $i = 0; $i <= scalar(@names); $i++) {
278     next unless ($names[$i]);
279     print STDERR "\t".$names[$i]." (".$types[$i].")\n";
280     }
281     }
282     print "Gathering data...";
283     my @rows = ();
284     while (my @arr = $sth->fetchrow_array()) {
285     push(@rows, \@arr);
286     }
287     $sth->finish();
288     print " done.\n";
289     my $nrows = $dbf{$table}($table, \@names, \@rows);
290     print &Log("Inserted $nrows of ".scalar(@rows)." records in table \"$table\" (".
291     sprintf("%.2f%%", ($nrows * 100 / scalar(@rows))).")");
292     print "\n";
293     }
294     close(LOG);
295     $xbdbh->disconnect();
296     $pgdbh->disconnect();
297     print "Log left in file \"$log\"\n";
298     exit $?;

  ViewVC Help
Powered by ViewVC 1.1.26