2017-12-01 7 views
-2

CSVデータの行のフィールドに電子メールアドレスを入力したいが、リストにカンマが含まれている。コンマで区切られた電子メールアドレスのリストである単一のCSVフィールドを抽出する方法

したがって、フィールド内のコンテンツも分割します。つまり、splitコマンドでこれを行う方法しかわからないため、このフィールドの内容を制御できません。

例データ:私は$fileLine[3]を使用

12/01/2017, billybob123, [email protected], [email protected], [email protected], AB, [email protected], \\123\abc 
# Open file for read 

    while (my $fileLine = <READ>) { 
     chomp $fileLine; 
     my @row = (split ',', $fileLine); 
     print $fileLine[3]\n\n"; 
     } 

。私が欲しい結果が

[email protected], [email protected] 

ですが、私は、このフィールド内のカンマ区切りの電子メールアドレスの数が動的である

[email protected] 

を取得します。

+2

'@'文字を持つ文字列を取得できますか? 'my @addrs = grep {/ @ /} split /、/ $ fileLine;' – toolic

+1

どうすればいいですか?あなたが 'A、B、C、D'を持っていれば、どのツールが' A'と 'B、C'と' D'フィールドが必要だと知ることができますか? "フィールド"とは何かの基準が存在しない限り。 – zdim

+1

スタンダードCSVパーシングライブラリを使用する!真剣に、私たちはこの質問を週に数回受け取ります。 CSVの解析は簡単ではなく、コードは作成され、テストされています。あなた自身に好意を持ち、cpanでCSVライブラリを探して使ってください。すべてのコーナーケースを処理します。特定のケースでは、CSVが壊れているように見えます。フィールドにカンマが含まれている場合は、引用符で囲まなければなりません。そうでない場合は常に曖昧さがあります。 –

答えて

3

まず、あなたのCSV入力が壊れています。カンマを含むフィールドは引用符で囲む必要があります。入力形式を変更できない場合は、次の方法をお勧めします。

  1. 標準のCSVパーサーを使用してください。これにより、各メールが別々のフィールドに表示されます。
  2. 電子メールフィールドの場合、適切なインデックス(例の3番目のフィールド)から開始し、フィールドが電子メールアドレスのように見える限りフィールド値を累積します。電子メールアドレスの正規表現は、Web上で簡単に見つけることができます。
  3. メールのように見えないフィールドに遭遇したときは、実際のインデックスの位置に関係なく、それが4番目以降のフィールドであるかのように見え、そのフィールドと次のフィールドを取ることを確認します。
+0

ありがとうカンマで区切られたフィールドが引用符で囲まれていることはわかりませんでした。 – jsvn

関連する問題