[英]How to use chomp
下面是我要处理的数据列表。 我想拆分列,然后以不同的方式重新加入它们。
我想将数组的最后一个元素切换为第三个元素,但是遇到了问题。 由于数组的最后一个元素的末尾包含一个换行符,因此当我将其切换为thrid时,它会将所有内容都踢倒了一行。
码
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时,什么也没发生。 有人可以帮忙吗?
chomp
从参数中删除结尾的换行符。 因为没有你的四个字段实际上应该包含一个换行符,这可能是你想要的数据处理的目的,做一些事情。 您甚至可以在将行拆分为字段之前用chomp
删除换行符,然后在每条记录后添加最后一个换行符,以添加最终换行语句:
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
}
while ( <> ) {
chomp;
my @flds = split /,/;
... rest of your stuff
}
在while
循环中,在处理每一行时,将$_
设置为该行的内容。 默认情况下chomp
,作用于$_
并删除尾随换行符。 split
也默认使用$_
,所以效果很好。
从技术上讲,将要发生的是@flds
的最后一个元素包括行尾的\\n
,例如$flds[3]
。
chomp()函数将(通常)从字符串末尾删除任何换行符。 我们通常说的原因是,它实际上会删除与$ /(输入记录分隔符)的当前值匹配的任何字符,并且$ /默认为换行符。
示例1.截断字符串从文件或用户读取数据时,通常会使用chomp()。 例如,当从标准输入流(STDIN)读取用户输入时,每行数据都会获得一个换行符。 chomp()在这种情况下非常有用,因为您无需编写正则表达式,也无需担心会删除所需的字符。
while (my $text = <STDIN>) {
chomp($text);
print "You entered '$text'\n";
last if ($text eq '');
}
该程序的示例用法和输出是:
一个词,您输入了“一个词”,一些文本,您输入了“一些文本,”
你登录了 ''
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.