下面我有一个我想要操作的数据列表。我想把这些列分开,重新加入到另一种安排中。
我想用第三个转换数组的最后一个元素,但是我遇到了一个问题。由于数组的最后一个元素在结尾处包含一个行字符,所以当我将其转换为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时,什么都不会发生。有人能帮忙吗?
发布于 2014-10-31 15:12:30
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
}发布于 2014-10-31 15:10:25
while ( <> ) {
chomp;
my @flds = split /,/;
... rest of your stuff
}在while循环中,在处理每一行时,$_被设置为该行的内容。默认情况下,chomp对$_进行操作并删除尾随行提要。split也默认使用$_,因此工作正常。
从技术上讲,将发生的是@flds中的最后一个元素,包括行中的尾随\n,例如$flds[3]。
发布于 2014-11-05 07:32:22
函数将(通常)删除字符串末尾的任何换行符。我们通常说的原因是,它实际上删除了与当前值$/ (输入记录分隔符)匹配的任何字符,$/默认值为换行符。
示例1.在从文件或用户读取数据时,通常使用chomp()。例如,当从标准输入流(STDIN)读取用户输入时,您将得到包含每一行数据的换行符。在这种情况下,chomp()非常有用,因为您不需要编写正则表达式,也不需要担心它会删除所需的字符。
while (my $text = <STDIN>) {
chomp($text);
print "You entered '$text'\n";
last if ($text eq '');}
此程序的示例用法和输出如下:
你输入的单词“a word”--你输入的“一些文本”
你输入了'‘
https://stackoverflow.com/questions/26677789
复制相似问题