получение "2032 - EIF - CR char внутри без кавычек, не является частью EOL @ pos" с моим Perl-скриптом - PullRequest
2 голосов
/ 12 февраля 2012

Я написал простой Perl-скрипт для чтения строки из CSV-файла. Код приведен ниже:

#!/usr/bin/perl

use strict;
use warnings;

use Text::CSV;

my $csv = Text::CSV->new({ binary => 1 });


open my $fh, "<", "testresults.csv" or die "testresults.csv $!";
while ( my $row = $csv->getline( $fh ) ) {
      my @fields = @$row;
}
$csv->eof or $csv->error_diag;
close $fh or die "testresults.csv $!";

И файл testresults.csv выглядит так:

Node1, Node2, Node3, Node4, map1, map2, map3, map4, map5, map6, map7, map8, DM, LAT, AVG, продукт

в первой строке, за которой следуют результаты в каждой строке:

name1, name2, name3, NAME4, Node1, Node2, node3, Node4, Node5, Node6, Node7, Node8,0%
0.002835480002,0.1714008533,4.86003691857886E-04

и т. Д.

При получении кода ./filename.pl из командной строки я получаю следующую ошибку: CSV_XS ОШИБКА: 2032 - EIF - символ CR внутри кавычек, не является частью EOL @ pos 420

Я пытался зайти в Google из-за этой ошибки, но не смог понять ее.

1 Ответ

3 голосов
/ 12 февраля 2012

Из нашего разговора в комментариях может показаться, что ошибка в строках ввода чередуется с нулевыми символами, которые становятся видимыми с помощью

use Data::Dumper;
$Data::Dumper::Useqq = 1;
while (<$fh>) {
    print Dumper $_;
}

Быстрый взлом состоит в том, чтобы убрать нольсимволы во входном файле с чем-то вроде:

perl -i.bak -pwe 'tr/\0//d' testresults.csv

ПРИМЕЧАНИЕ: Но, как было отмечено в комментариях от людей, более опытных в вопросах кодирования, это может / могло / должно быть решенорасшифровывая ваши данные вместо этого.Простое удаление плохих символов может слегка испортить ваши данные, и это не идеальное решение.

Извините, я мало что знаю об этом, но использую Text :: CSV ::Закодированный звучит как хорошее начало, как предложил cjm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...