【问题标题】:How to use chomp如何使用 chomp
【发布时间】:2014-10-31 15:07:56
【问题描述】:

下面是我要操作的数据列表。我想拆分列并以不同的排列重新加入它们。

我想将数组的最后一个元素与第三个元素进行切换,但我遇到了问题。 由于数组的最后一个元素在末尾包含一个行字符,所以当我将它切换为第三个时,它会将所有内容都踢下一行。

代码

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 有关,但是当我 chomp 第一个或最后一个元素时,所有 \n 都会被删除。 当我在两者之间使用 chomp 时,什么也没有发生。有人可以帮忙吗?

【问题讨论】:

  • 如果您的系统有perldoc,我建议您在对特定功能有疑问时首先使用它。从您的 shell 中运行非常方便,并且文档非常好。像这样运行:perldoc -f &lt;function&gt; 或者在这种情况下,perldoc -f chomp(我还添加了在线版本的链接)。请注意,chomp 的文档包含一个与您的代码非常相似的代码示例。
  • 非常酷!非常感谢您的提示,我发现自己很多时候都需要功能强大的示例! @ThisSuitIsBlackNot

标签: arrays perl chomp


【解决方案1】:

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
}

【讨论】:

  • say join ",", @flds[0,1,3,2];
【解决方案2】:
while ( <> ) {
    chomp; 
    my @flds = split /,/;
       ... rest of your stuff
 }

while 循环中,在处理每一行时,$_ 被设置为该行的内容。 chomp 默认情况下,作用于 $_ 并删除尾随换行符。 split 也默认使用$_,所以效果很好。

从技术上讲,@flds 中的最后一个元素包括该行的尾随 \n - 例如$flds[3]

【讨论】:

    【解决方案3】:

    chomp() 函数将(通常)从字符串末尾删除任何换行符。我们通常说的原因是它实际上删除了与 $/(输入记录分隔符)的当前值匹配的任何字符,并且 $/ 默认为换行符。

    示例 1. 切分字符串 从文件或用户读取数据时,您通常会使用 chomp()。例如,当从标准输入流 (STDIN) 读取用户输入时,每行数据都会有一个换行符。 chomp() 在这种情况下非常有用,因为您不需要编写正则表达式,也不必担心它会删除所需的字符。

    while (my $text = <STDIN>) {
    chomp($text);
    print "You entered '$text'\n";
    last if ($text eq '');
    

    }

    这个程序的示例用法和输出是:

    一句话 您输入了“一个词” 一些文字 您输入了“一些文字”

    你输入了''

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 2011-05-31
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多