use encoding from .encoding.csv filename
authorDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 15 Jul 2010 09:27:52 +0000 (11:27 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 15 Jul 2010 09:27:52 +0000 (11:27 +0200)
lib/MojoFacets/Import/CSV.pm

index d3fbb3b..9a3b45c 100644 (file)
@@ -10,15 +10,20 @@ use Data::Dump qw(dump);
 use Encode;
 
 __PACKAGE__->attr('path');
-__PACKAGE__->attr('full_path');
+__PACKAGE__->attr('full_path'); # FIXME remove full_path
 
 sub data {
        my $self = shift;
 
-       my $path = $self->path;
+       my $path = $self->full_path || $self->path;
 
-       my $data = read_file $self->full_path, { binmode => ':raw' }; # FIXME configurable!
-       $data = decode('cp1250', $data);
+       my $data = read_file $path, { binmode => ':raw' }; # FIXME configurable!
+       my $encoding = 'utf-8';
+       if ( $path =~ m/\.(\w+).csv/i ) {
+               $encoding = $1;
+               warn "decoding ", length($data), " bytes using $encoding\n";
+               $data = decode($encoding, $data);
+       }
 
        my @lines = split(/\r?\n/, $data);
        $data = { items => [] };
@@ -30,6 +35,8 @@ sub data {
                $delimiter = qr/;/;
        }
 
+       warn "$path ", $#lines + 1, " lines encoding: $encoding delimiter:",dump($delimiter);
+
        my $header_line = shift @lines;
 
        my @header = split( $delimiter, $header_line );