我想知道是否有人可以帮助一个绝望的 Perl 新手解决以下问题。我一整天都在尝试,但是随着我的 Perl 书在工作,我在 google 中似乎找不到任何相关的内容......或者也许我对此真的很愚蠢。
我有一个如下所示的文件:
Bob April
Bob April
Bob March
Mary August
Robin December
Robin April
我想要的输出文件是:
Bob April April March
Mary August
Robin December April
以便它按照每个人出现的顺序列出每个月。
我尝试将其变成散列,但当然它不会让我有重复项,因此我想我希望每个名称都有数组(在本例中为鲍勃、玛丽和罗宾)。 我害怕上传我一直在尝试调整的代码,因为我知道这会是非常错误的。我想我需要定义(?)数组。这是正确的吗?
任何帮助将不胜感激,我保证在此期间我会更多地学习 Perl。
感谢您的时间、耐心和帮助。
#!/usr/bin/perl -w
while (<>) {
chomp;
if (defined $old_name) {
$name=$1;
$month=$2;
if ($name eq $old_name) {
$array{$month}++;
}
else {
print "$old_name";
foreach (@array) {
push (@array, $month);
print "\t@array";
}
print "\n";
@array=();
$array{$month}++;
}
}
else {
$name=$1;
$month=$2;
$array{month}++;
}
$old_name=$name;
}
print "$old_name";
foreach (@array) {
push (@array, $month);
print "\t@array";
}
print "\n";
最佳答案
对于如此简单的任务,您的代码看起来过于复杂。
use strict;
use warnings;
my %hash;
while (<DATA>) {
my ($name, $mon) = split;
push @{$hash{$name}}, $mon;
}
for my $name (keys %hash) {
my @months = @{$hash{$name}};
print "$name\t@months\n";
}
__DATA__
Bob April
Bob April
Bob March
Mary August
Robin December
Robin April
关于arrays - 从制表符分隔的文本文件列创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154424/