capitalize few more fields
[crolist2marc] / csv2tsv.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4
5 # ls *.csv | xargs -i sh -cx "./csv2tsv.pl {} > tsv/{} 2>>/tmp/log"
6
7 use Data::Dump qw(dump);
8
9 my $cols = 0;
10 my $delimiter;
11
12 while(my $line = <>) {
13         chomp $line;
14         if ( $cols == 0 ) { # header
15                 $cols = $line =~ s/([,;])/$1/g;
16                 $delimiter = $1;
17                 warn "# delimiter [$delimiter] columns=$cols\n";
18         }
19
20         $line =~ s/,$/,_null_/; # protect last empty column
21
22         my @v = split(/$delimiter/, $line);
23         if ( $#v > $cols ) {
24 #warn "FIX $#v $cols", dump(@v);
25                 my @l2 = splice( @v, -2 ); # keep last two
26                 my @fix = splice( @v, $cols - 3 );
27 warn "XXX before ",dump( @fix );
28                 my ( $k, $v ) = ( shift(@fix), '' );
29                 while ( @fix && (( length($k) + length($fix[0]) ) < 8 ) ) {
30                         $k .= $k ? ',' : '';
31                         $k .= shift(@fix);
32                 }
33                 $k .= " " x (8 - length($k)); # pad key to 8 spaces
34                 $v = join(',', @fix);
35 warn "YYY after  ",dump( $k, $v );
36                 die "ASSERT key < 8 [$k]" if length($k) < 8;
37                 die "ASSERT key > 8 [$k]" if length($k) > 8;
38                 @v = ( @v, $k, $v, @l2 );
39         }
40
41         $v[-1] =~ s/_null_//;
42
43         $ENV{DEBUG} || print join("\t", @v), "\n";
44 }