/[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 900 by dpavlin, Wed Oct 10 19:46:58 2007 UTC revision 1302 by dpavlin, Sun Sep 20 19:05:56 2009 UTC
# Line 6  use strict; Line 6  use strict;
6  use WebPAC::Input;  use WebPAC::Input;
7  use base qw/WebPAC::Common/;  use base qw/WebPAC::Common/;
8    
9    use Data::Dump qw/dump/;
10    
11  =head1 NAME  =head1 NAME
12    
13  WebPAC::Input::ISI - support for ISI Export Format  WebPAC::Input::ISI - support for ISI Export Format
14    
 =head1 VERSION  
   
 Version 0.00  
   
15  =cut  =cut
16    
17  our $VERSION = '0.00';  our $VERSION = '0.03';
   
18    
19  =head1 SYNOPSIS  =head1 SYNOPSIS
20    
# Line 54  path to ISI export file Line 51  path to ISI export file
51    
52  =cut  =cut
53    
54    my $subfields = {
55            'CR' => sub {
56                    my $full_cr = shift;
57                    my @v = split(/, /, $full_cr);
58                    my $f = { full => $full_cr };
59                    foreach ( qw/author year reference volume page doi/ ) {
60                            if ( my $tmp = shift @v ) {
61                                    $f->{$_} = $tmp;
62                            }
63                    }
64                    if ( $f->{author} =~ /^\*(.+)/ ) {
65                            delete $f->{author};
66                            $f->{institution} = $1;
67                    }
68                    $f->{doi} =~ s{DOI\s+}{} if $f->{doi}; # strip DOI prefix
69                    return $f;
70            },
71    };
72    
73  sub new {  sub new {
74          my $class = shift;          my $class = shift;
75          my $self = {@_};          my $self = {@_};
# Line 88  sub new { Line 104  sub new {
104          my $tag;          my $tag;
105          my $rec;          my $rec;
106    
107            $self->{size} = 0;
108            my $max_size;
109            $max_size = ( $self->{offset} || 0 ) + $self->{limit} if $self->{limit};
110    
111            warn "# max_size: $max_size";
112    
113          while( $line = <$fh> ) {          while( $line = <$fh> ) {
114                  chomp($line);                  chomp($line);
115    
# Line 98  sub new { Line 120  sub new {
120                                  $v = $2;                                  $v = $2;
121                  } elsif ( $line =~ /^\s{3}(.+)$/ ) {                  } elsif ( $line =~ /^\s{3}(.+)$/ ) {
122                                  $v = $1;                                  $v = $1;
123                                    if ( $tag eq 'CR' && $v =~ m{DOI$} ) {
124                                            my $doi = <$fh>;
125                                            chomp($doi);
126                                            $doi =~ s{^\s{3}}{ } || die "can't find DOI in: $doi";
127                                            $v .= $doi;
128                                    }
129                  } elsif ( $line eq 'ER' ) {                  } elsif ( $line eq 'ER' ) {
130                            # join tags
131                            foreach ( qw/AB DE ID TI SO RP SC FU FX PA JI/ ) {
132                                    $rec->{$_} = join(' ', @{ $rec->{$_} }) if defined $rec->{$_};
133                            }
134                            # split on ;
135                            foreach ( qw/ID SC DE/ ) {
136                                    $rec->{$_} = [ split(/;\s/, $rec->{$_}) ] if defined $rec->{$_};
137                            }
138                            $rec->{'000'} = [ ++$self->{size} ];
139                          push @{ $self->{_rec} }, $rec;                          push @{ $self->{_rec} }, $rec;
140    
141                            last if $max_size && $self->{size} == $max_size;
142    
143                          $rec = {};                          $rec = {};
144                          $line = <$fh>;                          $line = <$fh>;
145                          chomp $line;                          chomp $line;
146                          $log->logdie("expected blank like in ",$arg->{path}, " +$.: $line") unless ( $line eq '' );                          $log->logdie("expected blank like in ",$arg->{path}, " +$.: $line") unless ( $line eq '' );
147                  } elsif ( $line eq 'EF' ) {                  } elsif ( $line eq 'EF' ) {
148                          last;                          last;
149                    } elsif ( $line =~ m{^(\S\S)\s*$} ) {
150                            warn "# $arg->{path} +$. empty |$line|\n";
151                  } else {                  } else {
152                          $log->logdie("can't parse +$. $arg->{path} : $line");                          $log->logdie("can't parse +$. $arg->{path} |$line|");
153                  }                  }
154    
155                  push @{ $rec->{$tag} }, $v;                  if ( defined $v ) {
156                            $v = $subfields->{$tag}->($v) if defined $subfields->{$tag};
157    
158                            $log->debug("$tag: ", sub { dump( $v ) });
159                            push @{ $rec->{$tag} }, $v;
160                    }
161    
162          }          }
163    
# Line 146  Return number of records in database Line 193  Return number of records in database
193    
194  sub size {  sub size {
195          my $self = shift;          my $self = shift;
196          return $#{$self->{_rec}} + 1;          return $self->{size};
197  }  }
198    
199  =head1 SEE ALSO  =head1 SEE ALSO
200    
201  L<http://isibasic.com/help/helpprn.html> is only sane source of document format which Google could find...  L<http://isibasic.com/help/helpprn.html> is only sane source of document format which Google could find...
202    
203  =head1 AUTHOR  =head1 AUTHOR
204    
205  Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>  Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>

Legend:
Removed from v.900  
changed lines
  Added in v.1302

  ViewVC Help
Powered by ViewVC 1.1.26