【问题标题】:How to get user input for the column label probeid in this program如何在此程序中获取列标签 probeid 的用户输入
【发布时间】:2011-09-28 00:43:32
【问题描述】:

我的数据有 170 行(exp.values)和 18,000 列(Probeid's)。如果我输入特定的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;

【问题讨论】:

  • 您的输入数据(一小部分)是什么样的?你想看到什么输出?你得到的当前输出有什么问题?清楚你的要求可以让人们更容易帮助你。

标签: perl parsing text


【解决方案1】:

你会为每一行获得一个普通的哈希引用,迭代它的键。在这里我对键进行排序,因为您可能不想以随机顺序浏览它们:

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

【讨论】:

  • 非常感谢您帮助我。
  • 嗨 Palant,如果我想要求用户在运行时键入 probeid,我尝试使用一个变量,但它显示在连接 (.) 或 C 处的字符串中使用未初始化的值: /Users/xxx/perl_workspace/perl_proj_one/GIS/just.pl 第 16 行, 第 1 行。
猜你喜欢
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
相关资源
最近更新 更多