arrays - 从制表符分隔的文本文件列创建数组

标签 arrays perl parsing csv

我想知道是否有人可以帮助一个绝望的 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/

相关文章:

arrays - 如何将 IMPORTRANGE() 数组转换为字符串,以便与 QUERY() 一起使用?

javascript - 数组类型错误

c# - LINQ 和 Array.Copy

python - 如何从从 Google 阅读器导出的 OPML 文件中提取提要网址?

Objective-C 解析器扑克手牌历史

arrays - 为什么 *S Slice 可以由文字 S 开头?

perl - 无法在 perl 的 XPath 上下文中获取元素的值

perl - 为什么 SSL 在 Starman 中失败

Perl 5.8.8 - Curses 界面 - 多选 - 这可能吗?

python - 如何解析包含 url 的字符串,将其更改为正确的链接