【发布时间】:2020-04-28 03:24:45
【问题描述】:
假设我有一个文件,其中包含以下行:
*some numbers* :00: *somenumbers*
*somenumbers* :21: *somenumbers*
对于:: 之间的每个数字,我需要计算它在文件中重复的次数?
while (<>){
chomp($_);
my ($nebitno,$bitno,$opetnebitno) = split /:/, $_;
$count{$bitno}++;
}
foreach $bitno(sort keys %count){
print $bitno," ",$count{bitno}, "\n";
}
【问题讨论】:
-
(a) 你试过什么? (b) 冒号是不是只有这些地方出现在一行上?一行可以有多个
:\d+:序列吗? (c) 如果您在命令行中指定了多个文件,您是要对每个文件进行计数,还是对这些文件进行汇总? -
(a) 我是 perl 新手,曾尝试将值放入列表中,然后增加了一些计数器,但看起来一点希望都没有 (b) 是的,这些是冒号出现在一行中的唯一位置只有一个::序列(c)我想为每个文件计数
-
我再说一遍:你试过什么?给我们看一看!有很多方法可以做到这一点——这是 Perl,所以是 TMTOWDTI(有不止一种方法可以做到)。你试过什么?您可能应该使用由数字字符串索引的哈希;你可以使用一个普通的数组。数字是否总是两位数,或者它们可以更大,更小?消极的?有一个积极的迹象?如果是肯定的,
10和+10算作 1 个或 2 个不同的数字吗? -
这里没有考虑可以指定多个文件
-
好的;除了不处理多个文件以及没有
use strict;和use warnings;之外,这是一份体面的工作。 (始终使用两组use,至少在您编写 Perl 的时间比我长(1992 年,或者可能更早一点)之前——我不相信我的脚本,直到它们对那些use干净为止选项;我不是一个优秀的 Perl 程序员。