Как получить пользовательский ввод для метки столбца probeid в этой программе - PullRequest
0 голосов
/ 04 июля 2011

Мои данные имеют 170 строк (exp.values) и 18 000 столбцов (Probeid's). Если я ввожу определенный датчик, мне нужно получить конкретный столбец. И этот пробид будет введен во время выполнения. У кого-нибудь есть идея? У меня нет проблем с выводом для этой программы. Эта программа выполняет задачу для идентификатора P_170221, который вводится во время кодирования. Когда я попытался ввести переменную $ probeid (полученную с помощью STDIN) вместо P_170221, я получил сообщение об ошибке:

Использование неинициализированного значения в конкатенации (.) Или в строке в C: /Users/xxx/perl_workspace/perl_proj_one/GIS/just.pl строка 16, <> строка 1.

#!/usr/bin/perl
use strict;
use warnings;
use Tie::Handle::CSV;
open(OUT,">C:\\Users\\xxx\\Desktop\\Output.txt")||die $!;
my $fh = Tie::Handle::CSV->new("C:\\Users\\xxx\\Desktop\\GE_Acc.csv", header => 1);

while (my $csv_line = <$fh>) {
   print OUT $csv_line->{'FID'} . ", " . $csv_line->{'IID'} .",".$csv_line->{'P_1710221'}."\n";
    my $i++;
}

close $fh;

1 Ответ

0 голосов
/ 04 июля 2011

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

while (my $csv_line = <$fh>) {
    print OUT $csv_line->{'FID'} . ", " . $csv_line->{'IID'};
    foreach my $key (sort keys %$csv_line) {
        # Ignore columns that aren't probeids
        next if $key eq 'FID' or $key eq 'IID';  

        print ", " . $csv_line->{$key};
    }
    print "\n";
}
...