11 |
use File::Slurp; |
use File::Slurp; |
12 |
use YAML qw/DumpFile/; |
use YAML qw/DumpFile/; |
13 |
use Text::CSV; |
use Text::CSV; |
14 |
use Encode qw/decode/; |
use Encode qw/from_to/; |
15 |
|
|
16 |
my $debug = 0; |
my $debug = 0; |
17 |
|
|
18 |
my $path = shift @ARGV || die "usage: $0 file.csv\n"; |
my $path = shift @ARGV || die "usage: $0 file.csv\n"; |
19 |
|
|
20 |
my $csv = read_file( $path ); |
my $csv = read_file( $path ); |
21 |
$csv = decode('utf-16', $csv); |
from_to($csv, 'utf-16', 'utf-8'); |
22 |
|
|
23 |
my @columns; |
my @columns; |
24 |
|
|
45 |
$v =~ s{^\s+}{}; |
$v =~ s{^\s+}{}; |
46 |
$v =~ s{\s+$}{}; |
$v =~ s{\s+$}{}; |
47 |
|
|
48 |
if ( $v =~ m{#} ) { |
# fix tel fields |
49 |
my @v = split(/\s*#\s*/, $v); |
$v =~ s{\s+}{#}g if $n =~ m{tel}; |
50 |
|
$v =~ s[\x{17d}][F] if $n =~ m{spol}; |
51 |
|
|
52 |
|
if ( $v =~ m{#} ) { # subfields delimiter in CSV data |
53 |
|
my @v = split(/\s*#+\s*/, $v); |
54 |
foreach my $pos ( 0 .. $#v ) { |
foreach my $pos ( 0 .. $#v ) { |
55 |
|
if ( $n =~ m{tel} ) { |
56 |
|
if ( $v[$pos] =~ m{^09} ) { |
57 |
|
$hash->{ $n . '_mobile' } ||= $v[$pos]; |
58 |
|
} else { |
59 |
|
$hash->{ $n . '_fixed' } ||= $v[$pos]; |
60 |
|
} |
61 |
|
} |
62 |
$hash->{ $n . '_' . $pos } = $v[$pos]; |
$hash->{ $n . '_' . $pos } = $v[$pos]; |
63 |
} |
} |
64 |
|
|
65 |
|
$hash->{ $n } = [ @v ]; |
66 |
|
} else { |
67 |
|
$hash->{ $n } = $v; |
68 |
} |
} |
|
$hash->{ $n } = $v; |
|
69 |
} |
} |
70 |
|
|
71 |
warn dump( $hash ) if $debug; |
warn dump( $hash ) if $debug; |