3

私はPerlを初めて使用し、学校向けのプロジェクトに取り組んでいて、行き詰まっています。

入力:スペース、タブ、「、」、「;」で区切られた電子メールアドレスを含む特定のテキストファイル または「:」[別々の行に置くことができます]。

メールアドレスを読み込んで配列に入れようとしています。1行でデータを解析できますが、改行または戻り値がある場合は、最後の要素のみを取得します。

誰かが私が別々の行に各アドレスを持つリストを取り、それらを解析する方法を理解するのを手伝ってもらえますか?正規表現について少し読んだことがありますが、もっと練習が必要です。ありがとう。

open(EmailAddresses, "EmailAdressesCommaList.txt") || die "Can not open file $!";

# 
while (<EmailAddresses>)
{
    chomp;
    # Split the line into words
    @lines = split /[ ,;:\t\r\n(\t\r\n\s)+?]/;
}

foreach $value (@lines)
{
    print $value . "\n";
}
4

3 に答える 3

7
open(EmailAddresses, "EmailAdressesCommaList.txt") || die "Can not open file $!";
while(<EmailAddresses>) {
    chomp;
    push @lines, split /[ ,;:\t\r\n(\t\r\n\s)+?]/;
}
foreach $value (@lines) {
    print $value . "\n";
}

つまり、問題は正規表現ではなく、ループを通過するたびに@linesを上書きしていることです。

于 2009-03-23T19:35:17.570 に答える
1

カオスが指摘したように、配列を上書きするのではなく、プッシュする必要がありますが、正規表現も奇妙です。あなたがしたいようです:

/[ ,;:\t\r\n][\t\r\n\s]+/

ただし、これも同様に機能すると思います。

/[,;:\s]+/
于 2009-03-23T22:35:41.427 に答える
1

カオスは正しい。テキスト ファイルを開いて同じプログラムで再度処理する場合は、忘れずに配列をクリアしてください。

@lines = ();
于 2009-03-24T10:54:23.553 に答える