1 package MojoFacets::Import::CSV;
9 use Data::Dump qw(dump);
12 __PACKAGE__->attr('path');
13 __PACKAGE__->attr('full_path'); # FIXME remove full_path
18 my $path = $self->full_path || $self->path;
20 my $data = read_file $path, { binmode => ':raw' }; # FIXME configurable!
21 my $encoding = 'utf-8';
22 if ( $path =~ m/\.(\w+).csv/i ) {
25 warn "decoding ", length($data), " bytes using $encoding\n";
26 $data = decode($encoding, $data);
28 my @lines = split(/\r?\n/, $data);
29 $data = { items => [] };
31 my $delimiter = qr/,/;
33 if ( $lines[0] !~ /;/ && $lines[1] =~ /;/ ) {
34 shift @lines; # FIXME ship non-header line
38 warn "$path ", $#lines + 1, " lines encoding: $encoding delimiter:",dump($delimiter);
40 my $header_line = shift @lines;
42 my @header = split( $delimiter, $header_line );
43 warn "# header ",dump( @header );
45 while ( my $line = shift @lines ) {
47 my @v = split($delimiter, $line);
49 foreach my $i ( 0 .. $#v ) {
50 $item->{ $header[$i] || "f_$i" } = [ $v[$i] ];
52 push @{ $data->{items} }, $item;
55 $data->{header} = [ @header ];