繁体   English   中英

如何使用排骨

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM