下面我有一个我想要操作的数据列表。我想拆分列并以不同的方式重新加入它们。
我想用第三个元素切换数组的最后一个元素但是我遇到了问题。 由于数组的最后一个元素在末尾包含一个行字符,当我将它切换为thrid时,它会将所有内容都按下来。
CODE
while (<>) {
my @flds = split /,/;
DO STUFF HERE;
ETC;
print join ",", @flds[ 0, 1, 3, 2 ]; # switches 3rd element with last
}
示例数据
1,josh,Hello,Company_name
1,josh,Hello,Company_name
1,josh,Hello,Company_name
1,josh,Hello,Company_name
1,josh,Hello,Company_name
1,josh,Hello,Company_name
我的结果 - 踢了一条线。
1,josh,Company_name
,Hello1,josh,Company_name
,Hello1,josh,Company_name
,Hello1,josh,Company_name
,Hello1,josh,Company_name
,Hello1,josh,Company_name,Hello
*所需的结果**
1,josh,Company_name,Hello
1,josh,Company_name,Hello
1,josh,Company_name,Hello
1,josh,Company_name,Hello
1,josh,Company_name,Hello
1,josh,Company_name,Hello
我知道它与chomp有关但当我选择第一个或最后一个元素时,所有\ n都被移除。 当我在两者之间使用chomp时,没有任何反应。有人可以帮忙吗?
答案 0 :(得分:4)
chomp
从参数中删除尾随换行符。由于您的四个字段中没有一个实际上包含换行符,因此这可能是您为了数据处理而要执行的操作。在将行拆分为字段之前,可以使用chomp
删除换行符,然后在每条记录之后使用最终的print语句添加换行符:
while (<>) {
chomp; # Automatically operates on $_
my @flds = split /,/;
DO STUFF HERE;
ETC;
print join(",", @flds[0,1,3,2]) . "\n"; # switches 3rd element with last
}
答案 1 :(得分:0)
while ( <> ) {
chomp;
my @flds = split /,/;
... rest of your stuff
}
在while
循环中,当处理每一行时,$_
将设置为该行的内容。默认情况下,chomp
会对$_
执行操作并删除尾随换行符。 split
也默认使用$_
,因此工作正常。
从技术上讲,将会发生的事情是@flds
中的最后一个元素包含来自该行的尾随\n
- 例如$flds[3]
。
答案 2 :(得分:0)
chomp()函数将删除(通常)字符串末尾的任何换行符。我们通常说的原因是它实际上删除了与$ /(输入记录分隔符)的当前值匹配的任何字符,并且$ /默认为换行符。
示例1. Chomping一个字符串 通常,在从文件或用户读取数据时,您将使用chomp()。例如,当从标准输入流(STDIN)读取用户输入时,您会获得每行数据的换行符。 chomp()在这种情况下非常有用,因为您不需要编写正则表达式,也不必担心删除所需的字符。
while (my $text = <STDIN>) {
chomp($text);
print "You entered '$text'\n";
last if ($text eq '');
}
该程序的使用和输出示例如下:
一句话 你输入了一个单词&#39; 一些文字 您输入了一些文字&#39;您输入了&#39;&#39;