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;
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;