メール本文からのデータ取り込み方法

「ASTERIA Warp」「ASTERIA 3」「ASTERIA On Demand」の
インストール・動作環境・パイプライン機能・フロー機能など全般について

メール本文からのデータ取り込み方法

投稿記事by naigai » 2018年6月22日(金) 17:03

初歩的な事で申し訳けないですがアドバイスお願いします。

メールで受信したデータをデータ化する必要があります。
POPからのCSVへの取り込み及び、レコード事の若干の加工は済んでいます。

CSVをループ
1行毎に、行の要素、その行がめアドレス、氏名、、住所。。。等を判断し文字分解し
データを取り出し別のCSV該当項目へセットし、あるタイミングでCSVを書き出す処理方法を教えて頂けないでしょうか?
あるタイミングとは、1つのCSVに複数のメール本文が受信されていますので
何かのマークたとえば【ご注文】~次の【ご注文】のレコードが1つのかたまりと考えます。

例CSV
【ご注文】
注文番号:aaa001
氏名: ○○様
tel:03030303
住所:aaaaaaaaaaaaaaa
注文内容:bbbbbbbbbbbbbbbb
 ・
 ・ 
【ご注文】
注文番号:aaa002
 ・
 ・
 ・

注文番号,氏名tel,住所,注文内容,・・・・・・・・
aaa001,○○様,03030303,aaaaaaaaaaaaaaa,bbbbbbbbbbbbbbbb,
aaa002
aaa003
aaa004
 ・
 ・
 ・
宜しくお願いします。
naigai
 
記事: 3
登録日時: 2014年12月03日(水) 17:50

Re: メール本文からのデータ取り込み方法

投稿記事by arimitsu » 2018年6月25日(月) 12:43

こんにちは。

メール本文の各行から値を取り出して、CSVを作成したいのかと思いましたが、あってますでしょうか?
さらに、メールなので値が入っていない可能性があるとか?

1行づつループして正規表現で何の情報の行であるかを確認しつつフロー変数へ値を保持して、
【ご注文】行のタイミングでCSVファイルへ追記していくのはいかがでしょうか?

【ご注文】 ←新しい注文だとわかる
注文番号:aaa001 ←注文番号なのでフロー変数noに値を保存する
氏名: ○○様 ←注文番号なのでフロー変数nameに値を保存する
tel:03030303 ←注文番号なのでフロー変数telに値を保存する
住所:aaaaaaaaaaaaaaa ←注文番号なのでフロー変数addに値を保存する
注文内容:bbbbbbbbbbbbbbbb ←注文番号なのでフロー変数infoに値を保存する
【ご注文】 ←新しい注文だとわかるので、今あるフロー変数の情報をCSVファイルに出力してクリアする 以下同じ処理の繰り返し
注文番号:xxx002
氏名: □□様
住所:xxxxxxxxxxxx
注文内容:zzzz

正規表現は簡単な指定の場合、「【ご注文】」とか「^注文番号:」でも動きます。

やりたいことが間違っていたらごめんなさい。
arimitsu
 
記事: 37
登録日時: 2015年6月16日(火) 16:54

Re: メール本文からのデータ取り込み方法

投稿記事by naigai » 2018年6月26日(火) 18:58

ご教授ありがとうございます。
やりたいことはこの通りです。
ただまだ素人でして、一部教えて下さい。

マッパーでするものだと思ってましたが、フローでSwitchRegexpコンポーネントで判定を次々に行いループするのでしょうか?

get ~ SwitchRegexp(=【ご注文】)  ~    SwitchRegexp(=注文番号) ~ SwitchRegexp(氏名  ~    SwitchRegexp(tel ・・・・・・ 
   true └書き出し         └フロー変数noへセット      └フロー変数nameへセット   └フロー変数telへセット

【ご注文】だった場合に書き出しクリアするとありますが、この方法はマッパーを配置しフロー変数から項目をセットし、変数をクリアする
のイメージで間違ってないでしょうか?

再度ご教授お願い致します。


 



こんにちは。

メール本文の各行から値を取り出して、CSVを作成したいのかと思いましたが、あってますでしょうか?
さらに、メールなので値が入っていない可能性があるとか?

1行づつループして正規表現で何の情報の行であるかを確認しつつフロー変数へ値を保持して、
【ご注文】行のタイミングでCSVファイルへ追記していくのはいかがでしょうか?

【ご注文】 ←新しい注文だとわかる
注文番号:aaa001 ←注文番号なのでフロー変数noに値を保存する
氏名: ○○様 ←注文番号なのでフロー変数nameに値を保存する
tel:03030303 ←注文番号なのでフロー変数telに値を保存する
住所:aaaaaaaaaaaaaaa ←注文番号なのでフロー変数addに値を保存する
注文内容:bbbbbbbbbbbbbbbb ←注文番号なのでフロー変数infoに値を保存する
【ご注文】 ←新しい注文だとわかるので、今あるフロー変数の情報をCSVファイルに出力してクリアする 以下同じ処理の繰り返し
注文番号:xxx002
氏名: □□様
住所:xxxxxxxxxxxx
注文内容:zzzz

正規表現は簡単な指定の場合、「【ご注文】」とか「^注文番号:」でも動きます。

やりたいことが間違っていたらごめんなさい。
naigai
 
記事: 3
登録日時: 2014年12月03日(水) 17:50

Re: メール本文からのデータ取り込み方法

投稿記事by arimitsu » 2018年6月27日(水) 10:54

こんにちは。

SwitchRegexpコンポーネントを使う方法は見た目からも処理の流れを把握しやすいので良いですね。
気がつきませんでした。

私が試しにやってみたものは、マッパー内でRegexpMatch、Ifといった関数を使用するやり方でしたが、
1つのSwitchRegexpコンポーネントの「分岐」に複数の正規表現を指定する方がすっきり書けます。

>【ご注文】だった場合に書き出しクリアするとありますが、この方法はマッパーを配置しフロー変数から項目をセットし、変数をクリアする
>のイメージで間違ってないでしょうか?

はいマッパーでCSVにマッピングしてファイルに追記、その後フロー変数をクリアしていました。

フローは見た目も大切ですので勉強になりました。
ありがとうございました。
arimitsu
 
記事: 37
登録日時: 2015年6月16日(火) 16:54

Re: メール本文からのデータ取り込み方法

投稿記事by naigai » 2018年6月28日(木) 09:18

再度回答ありがとうございます。
こちらこそご丁寧にありがとうございます!
早速試してみます。
ありがとうございました。

arimitsu さんが書きました:こんにちは。

SwitchRegexpコンポーネントを使う方法は見た目からも処理の流れを把握しやすいので良いですね。
気がつきませんでした。

私が試しにやってみたものは、マッパー内でRegexpMatch、Ifといった関数を使用するやり方でしたが、
1つのSwitchRegexpコンポーネントの「分岐」に複数の正規表現を指定する方がすっきり書けます。

>【ご注文】だった場合に書き出しクリアするとありますが、この方法はマッパーを配置しフロー変数から項目をセットし、変数をクリアする
>のイメージで間違ってないでしょうか?

はいマッパーでCSVにマッピングしてファイルに追記、その後フロー変数をクリアしていました。

フローは見た目も大切ですので勉強になりました。
ありがとうございました。
naigai
 
記事: 3
登録日時: 2014年12月03日(水) 17:50


Return to 聞きたい、知りたい、教えます

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[4人]