Perl获取数组计数,因此可以在某个数组元素处启动foreach循环

时间:2013-03-15 13:48:07

标签: perl

我有一个我正在阅读的文件。我正在使用perl来重新格式化日期。这是一个逗号分隔的文件。在其中一个文件中,我知道element.0是一个zipcode,而element.1是一个计数器。每行可以有1-n个城市。我需要知道从element.3到行尾的元素数量,以便我可以正确地重新格式化它们。我想使用从element.3开始的foreach循环来将其他元素格式化为单个字符串。

任何帮助将不胜感激。基本上我试图读取一个csv文件并创建一个cpp文件,然后可以在另一个平台上编译为该平台的插件。

最诚挚的问候 迈克尔古尔德

2 个答案:

答案 0 :(得分:2)

你可以做这样的事情来从一行中获取字段:

my @fields = split /,/, $line;

要访问从3到结尾的所有元素,请执行以下操作:

foreach my $city (@fields[3..$#fields])
{
   #do stuff
}

(注意,基于你的问题,我假设你使用的是从零开始的索引。因此“元素3”是第4个元素。)

或者,请考虑Text::CSV来阅读您的CSV文件,特别是如果您有转义分隔符等内容。

答案 1 :(得分:1)

如果您的行被读入数组,您可以通过在标量上下文中对其进行评估来获取数组中的元素数,例如

my $elems = @line;

或者非常确定

my $elems = scalar(@line);

虽然在这种情况下scalar是多余的,但它对于强制标量上下文非常方便,否则它将是列表上下文。您还可以使用$#line找到数组最后一个元素的索引。

之后,如果你想从元素3开始获取所有内容,你可以使用数组切片:

my @threeonwards = @line[3 .. $#line];