Я распаковал его ... как я могу сосчитать столбцы? - PullRequest
1 голос
/ 08 апреля 2011

Я использую распаковку для анализа некоторых текстовых файлов с некоторыми столбцами.Каждый текстовый файл отличается и имеет различное количество столбцов.Как я могу посчитать столбцы, чтобы не получать ошибок?Сейчас я использую 0..5, но если текстовый файл имеет 3 столбца, я получаю сообщение об ошибке: «Использование неинициализированного значения в подстановке ...».Спасибо!

open (PARSE,"<$temp") or die $!;

my @template = map {'A'.length} <PARSE> =~ /(\S+\s*)/g; 

next unless @template;
$template[-1] = 'A*';# set the last segment to be slurpy

my $template = "@template";

my @data;

while (<PARSE>) {
    push @data, [unpack $template, $_]
}

for my $dat (@data){ # for each row

    for(0..5){ # for each column in that row
    $dat->[$_]=~s/^\s+//g;
          $dat->[$_]=~s/\s+$//g; 
    print $dat->[$_].',';
    }
    print "\n";

 } 

Ответы [ 2 ]

3 голосов
/ 08 апреля 2011

С такими языками, как Perl, Python, Ruby и т. Д., Вам редко нужно опускаться до уровня индексов при итерации по массиву:

for my $cell (@$dat){
    # Work with $cell rather than $dat->[$_].
    ...
}
0 голосов
/ 08 апреля 2011

Возможно, проще и понятнее в использовании Tie::File, чтобы вам не приходилось считывать все в память, но есть один способ, который использует список @data, который вы создали:

my $dataFirstLine = $data[0];
chomp($dataFirstLine);
my @dataColumns = split("\t", $dataFirstLine); # assumes delimiter is tab, replace with escaped delimiter of choice
my $dataColumnCount = scalar @dataColumns;
print "number of columns: $dataColumnCount\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...