/[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

Contents of /convert.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show 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 #! /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