如何在此程序中获取列标签probeid的用户输入

时间:2011-07-04 09:53:15

标签: perl parsing text

我的数据有170行(exp.values)和18,000列(Probeid)。如果我输入特定的probeId,我需要检索特定的列。并且将在运行时输入该probeid。有没有人有想法?我对这个程序的输出没有问题。这个程序执行编码时输入的id 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 :(得分:0)

您获得每行的正常哈希引用,迭代其键。在这里,我对键进行排序,因为您可能不希望以随机顺序浏览它们:

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";
}