X-Git-Url: http://git.rot13.org/?p=virtual-ldap;a=blobdiff_plain;f=bin%2Fcsv2yaml.pl;h=b2623f6e6fb83db8aa8a49af3ed19345a38ae409;hp=9a81901d2fb231be418ca81cb56265fbed303499;hb=ae9edb3fcef1370d28ed71ed7830d0fa0d2fc657;hpb=c91ceea2f4392b735b9ab87109d7bee9160637cd diff --git a/bin/csv2yaml.pl b/bin/csv2yaml.pl index 9a81901..b2623f6 100755 --- a/bin/csv2yaml.pl +++ b/bin/csv2yaml.pl @@ -11,14 +11,14 @@ use Data::Dump qw/dump/; 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; @@ -37,7 +37,36 @@ foreach my $line ( split(/\r?\n/, $csv) ) { warn "# fields = ",dump( @fields ) if $debug; - $hash->{ $columns[$_] } = $fields[$_] foreach ( 0 .. $#fields ); + foreach ( 0 .. $#fields ) { + my $n = $columns[$_]; + my $v = $fields[$_]; + + $v =~ s{\s*#\s*$}{}; + $v =~ s{^\s+}{}; + $v =~ s{\s+$}{}; + + # fix tel fields + $v =~ s{\s+}{#}g if $n =~ m{tel}; + $v =~ s[\xC5\xBD][F]i 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 } = [ @v ]; + } else { + $hash->{ $n } = $v; + } + } warn dump( $hash ) if $debug;