/[webpac]/trunk/all2xml.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

Diff of /trunk/all2xml.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 81 by dpavlin, Tue Jul 8 22:13:56 2003 UTC revision 138 by dpavlin, Wed Oct 29 23:10:51 2003 UTC
# Line 82  sub data2xml { Line 82  sub data2xml {
82    
83          # sort subrouting using order="" attribute          # sort subrouting using order="" attribute
84          sub by_order {          sub by_order {
85                  return 0 if (! $config->{indexer}->{$a}->{order});                  my $va = $config->{indexer}->{$a}->{order} ||
86                  return 0 if (! $config->{indexer}->{$b}->{order});                          $config->{indexer}->{$a};
87                    my $vb = $config->{indexer}->{$b}->{order} ||
88                            $config->{indexer}->{$b};
89    
90                  return $config->{indexer}->{$a}->{order} <=>                  return $va <=> $vb;
                         $config->{indexer}->{$b}->{order} ;  
91          }          }
92    
93          foreach my $field (sort by_order keys %{$config->{indexer}}) {          foreach my $field (sort by_order keys %{$config->{indexer}}) {
94    
95                  $field=x($field);                  $field=x($field);
   
96                  $field_usage{$field}++;                  $field_usage{$field}++;
97    
98                  my $swish_data = "";                  my $swish_data = "";
# Line 124  sub data2xml { Line 124  sub data2xml {
124                          # init vars so that we go into while...                          # init vars so that we go into while...
125                          ($swish,$display) = (1,1);                          ($swish,$display) = (1,1);
126    
127                          if ($swish || $display) {                          # placeholder for all repeatable entries for index
128                            my @index_data;
129                            my $index_filter;
130    
131                            # while because of repeatable fields
132                            while ($swish || $display) {
133                                  ($swish,$display) = parse_format($type, $format,$row,$repeat_off++,$import2cp);                                  ($swish,$display) = parse_format($type, $format,$row,$repeat_off++,$import2cp);
134                                    if ($repeat_off > 1000) {
135                                            print STDERR "loop (more than 1000 repeatable fields) deteced in $row, $format\n";
136                                            last;
137                                    }
138                                    
139                                  # filter="name" ; filter this field through                                  # filter="name" ; filter this field through
140                                  # filter/[name].pm                                  # filter/[name].pm
141                                  my $filter = $x->{filter};                                  my $filter = $x->{filter};
# Line 150  sub data2xml { Line 160  sub data2xml {
160                                          }                                          }
161                                          if ($filter) {                                          if ($filter) {
162                                                  no strict 'refs';                                                  no strict 'refs';
163                                                  $display_data .= join($delimiter,&$filter($display));                                                  if ($display_data) {
164                                                            $display_data .= $delimiter.&$filter($display);
165                                                    } else {
166                                                            $display_data = &$filter($display);
167                                                    }
168                                          } else {                                          } else {
169                                                  if ($display_data) {                                                  if ($display_data) {
170                                                          $display_data .= $delimiter.$display;                                                          $display_data .= $delimiter.$display;
171                                                  } else {                                                  } else {
172                                                          $display_data .= $display;                                                          $display_data = $display;
173                                                  }                                                  }
174                                          }                                          }
175                                  }                                  }
176                                                                                                    
177                                  # type="index" ; insert into index                                  # type="index" ; insert into index
178                                  if ($i && $display) {                                  if ($i && $display) {
179                                          my $index_data = $display;                                          push @index_data, $display;
180                                          if ($filter) {                                          $index_filter = $filter if ($filter);
181                                                  no strict 'refs';                                  }
182                                                  foreach my $d (&$filter($index_data)) {                          }
183                                                          $index->insert($field, $d, $path);  
184                                                  }                          # fill data in index
185                                          } else {                          if (@index_data) {
186                                                  $index->insert($field, $index_data, $path);                                  if ($index_filter) {
187                                            no strict 'refs';
188                                            foreach my $d (@index_data) {
189                                                    $index->insert($field, &$index_filter($d), $path);
190                                            }
191                                    } else {
192                                            foreach my $d (@index_data) {
193                                                    $index->insert($field, $d, $path);
194                                          }                                          }
195                                  }                                  }
196                          }                          }
# Line 259  $index = new index_DBI( Line 280  $index = new index_DBI(
280                  $cfg_global->val('global', 'dbi_passwd') || '',                  $cfg_global->val('global', 'dbi_passwd') || '',
281          );          );
282    
283    my $show_progress = $cfg_global->val('global', 'show_progress');
284    
285  foreach my $database ($cfg->Sections) {  foreach my $database ($cfg->Sections) {
286    
287          my $type = lc($cfg -> val($database, 'type')) || die "$database doesn't have 'type' defined";          my $type = lc($cfg -> val($database, 'type')) || die "$database doesn't have 'type' defined";
# Line 275  print STDERR "reading ./import_xml/$type Line 298  print STDERR "reading ./import_xml/$type
298          # output current progress indicator          # output current progress indicator
299          my $last_p = 0;          my $last_p = 0;
300          sub progress {          sub progress {
301                  #return if (! $opts{q});        # FIXME                  return if (! $show_progress);
302                  my $current = shift;                  my $current = shift;
303                  my $total = shift || 1;                  my $total = shift || 1;
304                  my $p = int($current * 100 / $total);                  my $p = int($current * 100 / $total);
# Line 287  print STDERR "reading ./import_xml/$type Line 310  print STDERR "reading ./import_xml/$type
310    
311          my $fake_dir = 1;          my $fake_dir = 1;
312          sub fakeprogress {          sub fakeprogress {
313                    return if (! $show_progress);
314                  my $current = shift @_;                  my $current = shift @_;
315    
316                  my @ind = ('-','\\','|','/','-','\\','|','/', '-');                  my @ind = ('-','\\','|','/','-','\\','|','/', '-');
# Line 308  print STDERR "using: $type...\n"; Line 332  print STDERR "using: $type...\n";
332                  $import2cp = Text::Iconv->new($config->{isis_codepage},$codepage);                  $import2cp = Text::Iconv->new($config->{isis_codepage},$codepage);
333                  my $db = OpenIsis::open( $isis_db );                  my $db = OpenIsis::open( $isis_db );
334    
335                    # check if .txt database for OpenIsis is zero length,
336                    # if so, erase it and re-open database
337                    sub check_txt_db {
338                            my $isis_db = shift || die "need isis database name";
339                            my $reopen = 0;
340    
341                            if (-e $isis_db.".TXT") {
342                                    print STDERR "WARNING: removing $isis_db.TXT OpenIsis database...\n";
343                                    unlink $isis_db.".TXT" || warn "FATAL: unlink error on '$isis_db.TXT': $!";
344                                    $reopen++;
345                            }
346                            if (-e $isis_db.".PTR") {
347                                    print STDERR "WARNING: removing $isis_db.PTR OpenIsis database...\n";
348                                    unlink $isis_db.".PTR" || warn "FATAL: unlink error on '$isis_db.PTR': $!";
349                                    $reopen++;
350                            }
351                            return OpenIsis::open( $isis_db ) if ($reopen);
352                    }
353    
354                    # EOF error
355                    if ($db == -1) {
356                            $db = check_txt_db($isis_db);
357                            if ($db == -1) {
358                                    print STDERR "FATAL: OpenIsis can't open zero size file $isis_db\n";
359                                    next;
360                            }
361                    }
362    
363                    # OpenIsis::ERR_BADF
364                    if ($db == -4) {
365                            print STDERR "FATAL: OpenIsis can't find file $isis_db\n";
366                            next;
367                    # OpenIsis::ERR_IO
368                    } elsif ($db == -5) {
369                            print STDERR "FATAL: OpenIsis can't access file $isis_db\n";
370                            next;
371                    } elsif ($db < 0) {
372                            print STDERR "FATAL: OpenIsis unknown error $db with file $isis_db\n";
373                            next;
374                    }
375    
376                  my $max_rowid = OpenIsis::maxRowid( $db );                  my $max_rowid = OpenIsis::maxRowid( $db );
377    
378                    # if 0 records, try to rease isis .txt database
379                    if ($max_rowid == 0) {
380                            # force removal of database
381                            $db = check_txt_db($isis_db);
382                            $max_rowid = OpenIsis::maxRowid( $db );
383                    }
384    
385                  print STDERR "Reading database: $isis_db [$max_rowid rows]\n";                  print STDERR "Reading database: $isis_db [$max_rowid rows]\n";
386    
387                  my $path = $database;                  my $path = $database;
# Line 331  print STDERR "using: $type...\n"; Line 403  print STDERR "using: $type...\n";
403                                  }                                  }
404                          }                          }
405                  }                  }
406                    # for this to work with current version of OpenIsis (0.9.0)
407                    # you might need my patch from
408                    # http://www.rot13.org/~dpavlin/projects/openisis-0.9.0-perl_close.diff
409                    OpenIsis::close($db);
410                  print STDERR "\n";                  print STDERR "\n";
411    
412          } elsif ($type_base eq "excel") {          } elsif ($type_base eq "excel") {

Legend:
Removed from v.81  
changed lines
  Added in v.138

  ViewVC Help
Powered by ViewVC 1.1.26