我很茫然,希望在这里找到帮助。我要完成的是以下内容:我有一个 .csv 文件,其中有 8 列。第三列包含格式如下的电话号码:
+45 23455678
+45 12314425
+45 43631678
+45 12345678
(goes on for a while)
我想要的是:
+45 2345 5678
+45 1231 4425
+45 4363 1678
+45 1234 5678
(etc)
所以只是第 8 位之后的空格(包括 + 和空格)。我尝试了各种方法,但没有奏效。首先,我使用 substr 进行了尝试,但无法使其正常工作。然后看分裂功能。然后我就糊涂了!我是 perl 的新手,所以我不确定我在寻找什么,但我已经尝试了一切。有 1 个条件,所有数字都以(比如说)+45 开头,然后是一个空格和一个数字块。但并非所有数字的长度都相同,有些数字超过 10 位。我想要它做的是取第一位“+45 1234”(/+43\s{1}\d{4}/),然后是第二部分,不管它有多少位。我想将 LIMIT 设置为 1,所以它只会添加最后一位,无论它是 4 位数字还是 8 位长。
我读过http://www.perlmonks.org/?node_id=591988,但“使用拆分与正则表达式”部分让我感到困惑。
我已经尝试了 3 天,但没有任何进展。我想这应该很简单,但我现在才开始了解 perl 的基础知识。我确实了解正则表达式,但我不知道针对特定任务使用什么语句。这是我的代码:
@ARGV or die "Usage: $0 input-file output-file\n";
$inputfile=$ARGV[0];
$outputfile=$ARGV[1];
open(INFILE,$inputfile) || die "Bestand niet gevonden :$!\n";
open(OUTFILE,">$outputfile") || die "Bestand niet gevonden :$!\n";
$i = 0;
@infile=<INFILE>;
foreach ( @infile ) {
$infile[$i] =~ s/"//g;
@elements = split(/;/,$infile[$i]);
@split = split(/\+43\s{1}\d{4}/, $elements[2], 1);
@split = join ???
@elements = join(";",@elements); # Add ';' to all elements
print OUTFILE "@elements";
$i = $i+1;
}
close(INFILE);
close(OUTFILE);