私は途方に暮れていて、ここで助けを見つけることを望んでいます。私が達成しようとしているのは次のとおりです。8列の.csvファイルがあります。3番目の列には、次のようにフォーマットされた電話番号が含まれています。
+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} /)を取り、次に桁数に関係なく2番目の部分を取ります。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);