7 use Data::Dump qw(dump);
13 my ($file,$parse) = @_;
15 print STDERR "# reading $file ";
18 open(my $fh, '<', $file);
19 my $h = <$fh>; # header
22 my ( $idsl, $tag, $tagno, $id, $sfi, $sfino, $text ) = $parse->($_);
26 print STDERR "\nSKIP $lines [$_] ";
33 $id .= " " if length $id < 2;
34 $id .= " " if length $id < 2;
35 my ($i1, $i2) = split(//, $id, 2);
37 $sfi =~ s/^\$// || die "can't fix subfield [$sfi]";
39 $text =~ tr/^~]}\|[{@`/ČčĆćĐ𩹮ž/; # CROASCII (YUS|HRN) B1.002:1982
41 $data->{$idsl}->{$tag}->[ $tagno ]->[ 0 ] = $i1;
42 $data->{$idsl}->{$tag}->[ $tagno ]->[ 1 ] = $i2;
43 $data->{$idsl}->{$tag}->[ $tagno ]->[ ( $sfino * 2 ) + 2 ] = $sfi;
44 $data->{$idsl}->{$tag}->[ $tagno ]->[ ( $sfino * 2 ) + 3 ] = $text;
46 print STDERR "$lines " if $lines % 1000 == 0;
51 csv_file( 'TEKTAG.csv', sub {
54 my ( $idsl, $tag, $tagno, $id, $sfi, $sfino, $textkey, $textres ) = split(/,/,$_);
56 my $text = $textkey . $textres; # FIXME fix CAPITAL letters in $textkey
58 return ( $idsl, $tag, $tagno, $id, $sfi, $sfino, $text );
61 csv_file( 'LONTAG.csv', sub {
64 my ( $idsl, $tag, $tagno, $id, $sfi, $sfino, $text ) = split(/;/,$_, 7);
67 $text =~ s/;/\n/g; # join OPIS[1-11]
69 return ( $idsl, $tag, $tagno, $id, $sfi, $sfino, $text );
72 print STDERR "\n# getting all ids ";
73 my @ids = keys %$data;
74 print STDERR scalar(@ids), " found\n";
75 foreach my $id ( @ids ) {
76 print "# $id ",dump($data->{$id});