--- bin/csv2yaml.pl 2009/03/15 20:47:15 13 +++ bin/csv2yaml.pl 2009/03/16 13:54:50 25 @@ -11,14 +11,14 @@ use File::Slurp; use YAML qw/DumpFile/; use Text::CSV; -use Encode qw/decode/; +use Encode qw/from_to/; my $debug = 0; my $path = shift @ARGV || die "usage: $0 file.csv\n"; my $csv = read_file( $path ); -$csv = decode('utf-16', $csv); +from_to($csv, 'utf-16', 'utf-8'); my @columns; @@ -45,14 +45,27 @@ $v =~ s{^\s+}{}; $v =~ s{\s+$}{}; - if ( $v =~ m{#} ) { - my @v = split(/\s*#\s*/, $v); + # fix tel fields + $v =~ s{\s+}{#}g if $n =~ m{tel}; + $v =~ s[\x{17d}][F] if $n =~ m{spol}; + + if ( $v =~ m{#} ) { # subfields delimiter in CSV data + my @v = split(/\s*#+\s*/, $v); foreach my $pos ( 0 .. $#v ) { + if ( $n =~ m{tel} ) { + if ( $v[$pos] =~ m{^09} ) { + $hash->{ $n . '_mobile' } ||= $v[$pos]; + } else { + $hash->{ $n . '_fixed' } ||= $v[$pos]; + } + } $hash->{ $n . '_' . $pos } = $v[$pos]; - $hash->{ $n . '_mobitel' } = $v[$pos] if $n =~ m{tel} && $v[$pos] =~ m{^09}; } + + $hash->{ $n } = [ @v ]; + } else { + $hash->{ $n } = $v; } - $hash->{ $n } = $v; } warn dump( $hash ) if $debug;