/[webpac2]/branches/Sack/lib/WebPAC/Input/ISI.pm
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 /branches/Sack/lib/WebPAC/Input/ISI.pm

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

revision 1303 by dpavlin, Sun Sep 20 19:56:33 2009 UTC revision 1305 by dpavlin, Sun Sep 20 22:26:27 2009 UTC
# Line 104  sub new { Line 104  sub new {
104          my $tag;          my $tag;
105          my $rec;          my $rec;
106    
         my $pos = 0;  
107          my $offset = $self->{offset} || 0;          my $offset = $self->{offset} || 0;
108          my $end_pos = 0;          my $limit  = $self->{limit}  || 0;
         $end_pos = $offset + $self->{limit} if $self->{limit};  
109    
110          warn "# range: $offset - $end_pos";          my $file_pos = 0;
111            my $end_pos  = 0;
112            $end_pos = $offset + $limit if $limit;
113    
114            $self->{_rec} = [];
115            
116            warn "# offset: $offset limit: $limit end: $end_pos";
117    
118          while( $line = <$fh> ) {          while( $line = <$fh> ) {
119                  chomp($line);                  chomp($line);
# Line 118  sub new { Line 122  sub new {
122                  if ( $line eq 'EF' ) {                  if ( $line eq 'EF' ) {
123                          last;                          last;
124                  } elsif ( $line eq 'ER' ) {                  } elsif ( $line eq 'ER' ) {
125                          last if $end_pos && $pos >= $end_pos;                          $file_pos++;
126                          $pos++;                          last if $end_pos && $file_pos > $end_pos;
127                          next if $offset && $pos < $offset;  
128                            if ( ! $offset || $file_pos > $offset ) {
129                          # join tags  
130                          foreach ( qw/AB DE ID TI SO RP SC FU FX PA JI/ ) {                                  # join tags
131                                  $rec->{$_} = join(' ', @{ $rec->{$_} }) if defined $rec->{$_};                                  foreach ( qw/AB DE ID TI SO RP SC FU FX PA JI/ ) {
132                          }                                          $rec->{$_} = join(' ', @{ $rec->{$_} }) if defined $rec->{$_};
133                          # split on ;                                  }
134                          foreach ( qw/ID SC DE/ ) {                                  # split on ;
135                                  $rec->{$_} = [ split(/;\s/, $rec->{$_}) ] if defined $rec->{$_};                                  foreach ( qw/ID SC DE/ ) {
136                                            $rec->{$_} = [ split(/;\s/, $rec->{$_}) ] if defined $rec->{$_};
137                                    }
138                                    $rec->{'000'} = [ $file_pos ];
139                                    push @{ $self->{_rec} }, $rec;
140                          }                          }
                         $rec->{'000'} = [ $pos ];  
                         push @{ $self->{_rec} }, $rec;  
141    
142                          $rec = {};                          $rec = {};
143                          $line = <$fh>;                          $line = <$fh>;
144                          chomp $line;                          chomp $line;
145                          $log->logdie("expected blank like in ",$arg->{path}, " +$.: $line") unless ( $line eq '' );                          $log->logdie("expected blank like in ",$arg->{path}, " +$.: $line") unless ( $line eq '' );
146                  } elsif ( $offset && $pos < $offset ) {                  } elsif ( $offset && $file_pos < $offset ) {
147                          next;                          next;
148                  } elsif ( $line =~ /^(\S\S)\s(.+)$/ ) {                  } elsif ( $line =~ /^(\S\S)\s(.+)$/ ) {
149                                  $tag = $1;                          $tag = $1;
150                                  $v = $2;                          $v = $2;
151                  } elsif ( $line =~ /^\s{3}(.+)$/ ) {                  } elsif ( $line =~ /^\s{3}(.+)$/ ) {
152                                  $v = $1;                          $v = $1;
153                                  if ( $tag eq 'CR' && $v =~ m{DOI$} ) {                          if ( $tag eq 'CR' && $v =~ m{DOI$} ) {
154                                          my $doi = <$fh>;                                  my $doi = <$fh>;
155                                          chomp($doi);                                  chomp($doi);
156                                          $doi =~ s{^\s{3}}{ } || die "can't find DOI in: $doi";                                  $doi =~ s{^\s{3}}{ } || die "can't find DOI in: $doi";
157                                          $v .= $doi;                                  $v .= $doi;
158                                  }                          }
   
159                  } elsif ( $line =~ m{^(\S\S)\s*$} ) {                  } elsif ( $line =~ m{^(\S\S)\s*$} ) {
160                          warn "# $arg->{path} +$. empty |$line|\n";                          warn "# $arg->{path} +$. empty |$line|\n";
161                  } else {                  } else {
# Line 165  sub new { Line 170  sub new {
170                  }                  }
171    
172          }          }
   
         $self->{size} = $pos - $offset;  
   
173          $log->debug("loaded ", $self->size, " records");          $log->debug("loaded ", $self->size, " records");
174    
175          $self ? return $self : return undef;          $self ? return $self : return undef;
# Line 186  sub fetch_rec { Line 188  sub fetch_rec {
188    
189          my ( $mfn, $filter_coderef ) = @_;          my ( $mfn, $filter_coderef ) = @_;
190    
191            $mfn -= $self->{offset} if $self->{offset};
192          return $self->{_rec}->[$mfn-1];          return $self->{_rec}->[$mfn-1];
193  }  }
194    
# Line 200  Return number of records in database Line 203  Return number of records in database
203    
204  sub size {  sub size {
205          my $self = shift;          my $self = shift;
206          return $self->{size};          $#{ $self->{_rec} } + 1;
207  }  }
208    
209  =head1 SEE ALSO  =head1 SEE ALSO

Legend:
Removed from v.1303  
changed lines
  Added in v.1305

  ViewVC Help
Powered by ViewVC 1.1.26