如何使用chomp

时间:2014-10-31 15:07:56

标签: arrays perl chomp

下面我有一个我想要操作的数据列表。我想拆分列并以不同的方式重新加入它们。

我想用第三个元素切换数组的最后一个元素但是我遇到了问题。 由于数组的最后一个元素在末尾包含一个行字符,当我将它切换为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时,没有任何反应。有人可以帮忙吗?

3 个答案:

答案 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;