【问题标题】:How to remove commas at the end of array elements if present?如果存在,如何删除数组元素末尾的逗号?
【发布时间】:2015-03-16 10:11:36
【问题描述】:

我有一个 array23,其中包含一个文件的字符串,每个字符串都在一行中。有些字符串有一个“,”,最后没有空格。如果存在,我想删除字符串末尾的逗号。我尝试了以下代码,但无法正常工作

#!/usr/bin/perl
use strict;
use warnings;


open my $abcd , '>','perl_script_3_out_1.txt' or die $!;

foreach( @array23 )
 {
   if ((substr $_,0,-1) =~ ",")
   { 
    s/","//g;
   }
 }
  print $abcd  "$_";                                                                                                                                 

close($abcd);

【问题讨论】:

  • print $abcd $_,"\n" 应该在 foreach 循环内。
  • 你是对的..谢谢 :))

标签: perl


【解决方案1】:

您的程序不会按原样打印任何内容,因为您的打印语句(位于循环之外)引用了仅存在于循环中的 default variable $_

您还在 "," 上执行正则表达式 - 这不是您想要的(, 在每个字符串的末尾)。

您应该始终在每个脚本的开头添加 use strictuse warnings 以捕获此类内容

我会使用这样的东西:

这只会删除出现在每行末尾的,

use strict;
use warnings;

for my $element (@array){
     $element =~ s/,$//g;
     print "$element\n";
}

【讨论】:

  • 非常感谢@fugu,您提供的工作正常 :)。如果您也能告诉我哪里出错了,我将不胜感激。
  • 模式匹配中的引号与您认为的不同。
  • 我用 s/\,//g 而不是 s/","//g 尝试了我的,但它仍然无法正常工作!
  • @Grace90:您自己的代码有一些问题。 1.substr 的格式是substr EXPR,OFFSET,LENGTH,你使用substr $_, 0, -1,所以偏移量为零,长度为-1。负长度会删除字符串末尾的那么多字符,因此您要删除可能是逗号的字符。 2. 当您只想删除逗号时,s/","//g 删除所有出现的","s/,//g 是正确的,但它会删除字符串中任何位置的所有逗号,而不仅仅是在末尾。 3. 当$_不再有任何值时,你在循环结束后打印它的值。
  • @Sobrique ...现在工作,必须按照上面 JE SUIS CHARLIE 的建议将 print $abcd $_,"\n" 放入 foreach 循环中,并使用 s/\,//g 而不是s/","//g 如你所说。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 2017-06-29
  • 1970-01-01
相关资源
最近更新 更多