我在Perl中有一个像这样的数组,
my @a = (
'12345 abcd efgh ijkl mnop',
'23456 asdf sdfse ert vsfg',
'56706 isdua sdf sef mnvsdf',
)
我需要以下列方式存储
单独使用逗号,
分隔的单独变量中的第一列12345,23456,56706
以冒号:
分隔的前两列,这些列又以逗号,
分隔,如12345:abcd,23456:asdf,56706:isdua
我正在尝试第一个案例,但我无法找到解决方案
foreach my $s (@a){
my @entries = split(/ /, $s);
my $_p = $entries[0];
$csv1 = join(',', $_p);
}
我只获得最后一个值56706
我使用了$csv2 = $csv2 . "," . $_p;
,我得到了,12345,23456,56706
有人可以告诉我如何获得12345,23456,56706
第二种情况吗?
答案 0 :(得分:1)
我首先使用map
来构建每行前两个值的数组。之后,只需将join
应用于新列表的适当映射
use strict;
use warnings 'all';
use feature 'say';
my @a = (
'12345 abcd efgh ijkl mnop',
'23456 asdf sdfse ert vsfg',
'56706 isdua sdf sef mnvsdf',
);
my ($s1, $s2);
{
my @pairs = map [ ( split )[0,1] ], @a;
$s1 = join ',', map $_->[0], @pairs;
local $" = ':';
$s2 = join ',', map "@$_", @pairs;
}
say $s1;
say $s2;
12345,23456,56706
12345:abcd,23456:asdf,56706:isdua
答案 1 :(得分:0)
您可以检查累加变量的长度,以了解您是否在循环的第一次迭代中,并且仅在您不是时才添加逗号。
#!/usr/bin/perl
use strict;
use warnings;
my @array = ('12345 abcd efgh ijkl mnop',
'23456 asdf sdfse ert vsfg',
'56706 isdua sdf sef mnvsdf',
);
my ($first_one, $first_two);
for my $element (@array) {
my @entries = (split ' ', $element)[ 0, 1 ];
$first_one .= (length $first_one ? ',' : '') . $entries[0];
$first_two .= (length $first_two ? ',' : '') . "$entries[0]:$entries[1]";
}
print $first_one, "\n", $first_two, "\n";
你真的想在变量中累积结果吗?不想将它们打印到文件中吗?如果是,甚至可以逐行处理输入,而不是将其加载到数组中。