Arrays Perl读取文件以创建一个或多个数组
我有一些以下格式的文件:Arrays Perl读取文件以创建一个或多个数组,arrays,perl,while-loop,Arrays,Perl,While Loop,我有一些以下格式的文件: >Age PT 134 PT 145 PT 203 PT 237 >Karnofsky PT 167 >Overall_Survival PT 49 PT 126 PT 32 我要做的是读取一对文件,从两个文件创建一个数组,然后比较每个组合,以查找共享值,因此最终输出如下所示: >Age_vs_>CategoryA PT 145 PT 203 >Karnofsky_vs_>CategoryA NO SHARED VALUES
>Age
PT 134
PT 145
PT 203
PT 237
>Karnofsky
PT 167
>Overall_Survival
PT 49
PT 126
PT 32
我要做的是读取一对文件,从两个文件创建一个数组,然后比较每个组合,以查找共享值,因此最终输出如下所示:
>Age_vs_>CategoryA
PT 145
PT 203
>Karnofsky_vs_>CategoryA
NO SHARED VALUES
>Overall_Survival_vs_>CategoryA
PT 126
>CategoryA
PT 134
PT 155
PT 209
>CategoryB
PT 47
PT 33
PT 155
我在构建阵列时遇到问题。我编写了以下代码:
my @array
while (<FILE1>) {
my $line = $_;
chomp $line;
if ( $line =~ /^>/ ) {
@array = $line;
}
if ( $line !~ /^>/ ) {
push(@array, $line);
}
}
澄清:我的目的是处理两对文件,查找每对数组之间的每个共享值。与前面描述的文件一起分析的文件可能如下所示:
>Age_vs_>CategoryA
PT 145
PT 203
>Karnofsky_vs_>CategoryA
NO SHARED VALUES
>Overall_Survival_vs_>CategoryA
PT 126
>CategoryA
PT 134
PT 155
PT 209
>CategoryB
PT 47
PT 33
PT 155
所需的输出不会在文件中包含任何比较。这样就不会有输出读数
>CategoryA_vs_>CategoryB
PT 155
my@File1;
我的%hash;
while(我的$line=){
chomp$行;
如果($line=~s/^>/){
按@File1,$line;
}
否则{
推送{$hash{$File1[-1]},$行;
}
}
使用数据::转储程序;
打印转储文件\@File1;
打印转储程序\%hash;
AoA:
my@数据;
我的名字;
我的$i=-1;
while(我的$line=){
chomp$行;
如果($line=~/^>/){
$i++;
按@names$line;
}
如果($line!~/^>/){
推送{$data[$i]},$line;
}
}
您对问题的定义不是很精确,但我认为哈希是达到合理效率水平的最佳选择
程序希望输入文件的pasth作为命令行上的参数
我为CategoryA
发明了一些值,因此输出与您的示例相同
use strict;
use warnings;
my @categories;
my %data;
while (<>) {
next unless /\S/;
chomp;
if ( /^>/ ) {
push @categories, $_;
}
elsif (@categories) {
++$data{$categories[-1]}{$_};
}
}
for my $i (0 .. $#categories-1) {
for my $j ($i+1 .. $#categories) {
my ($cat1, $cat2) = @categories[$i, $j];
my @shared = grep $data{$cat1}{$_}, keys %{ $data{$cat2} };
printf "%s_vs_%s\n", $cat1, $cat2;
print @shared ? map "$_\n", @shared : "NO SHARED VALUES\n";
}
}
输出
>Age_vs_>Karnofsky
NO SHARED VALUES
>Age_vs_>Overall_Survival
NO SHARED VALUES
>Age_vs_>CategoryA
PT 203
PT 145
>Karnofsky_vs_>Overall_Survival
NO SHARED VALUES
>Karnofsky_vs_>CategoryA
NO SHARED VALUES
>Overall_Survival_vs_>CategoryA
PT 126
明显的AoA格式本身并不存在。如果您确实提供了您遇到问题的代码的所需输出(数据结构格式),这会有所帮助<代码>[{name=>'Age',data=>['PT 134',…]},…]如果您显示的所需输出与示例输入相对应,则会有所帮助。您的输入中没有
CategoryA
,很抱歉我原来的帖子中出现了混乱。我最初只是想弄清楚如何创建一个数组数组,直到刚才的更新才清楚地解释了问题的其余部分。
>Age
PT 134
PT 145
PT 203
PT 237
>Karnofsky
PT 167
>Overall_Survival
PT 49
PT 126
PT 32
>CategoryA
PT 126
PT 158
PT 145
PT 203
>Age_vs_>Karnofsky
NO SHARED VALUES
>Age_vs_>Overall_Survival
NO SHARED VALUES
>Age_vs_>CategoryA
PT 203
PT 145
>Karnofsky_vs_>Overall_Survival
NO SHARED VALUES
>Karnofsky_vs_>CategoryA
NO SHARED VALUES
>Overall_Survival_vs_>CategoryA
PT 126