バーガータイム 2/3
「受注メールをどうするかも考えておこう」
「そうですね」
ダブルチーズバーガーの包装を開けながら島田君はすこし考える。
「Shift-JIS のテキストファイルにまでなってるんですから、あとはパースすればいいんじゃないでしょうか」
ナゲットを口にくわえたまま真面目な顔を作った社長が先をうながす。
「受注情報は楽々の受注番号、注文日時、お名前、郵便番号、住所、電話番号、メールアドレス、お支払い方法です。そして注文情報は楽々の受注番号、商品番号、単価、数量です。楽々の受注番号で紐付けて構造化したら、FileMakerにすんなり入るんじゃないですか」
「だけど今、詰まってるのは顧客情報の確認だよ。確認しないで入れちゃうのか」
「入れてから確認したらいいんですよ。営業部で主に使用している未確定の受注って状態があるでしょう。あれをそのまま楽々の受注に使えます。楽々用の受注入力画面を作って、そこで担当が確認して確定したらいいです」
「まず楽々の受注情報を仮テーブルへインポートする。スクリプトで受注番号を採番。受注番号と楽々の受注番号を対応付けて受注テーブルへ登録して、未確定フラグをセットする。注文情報の取り込み時に仮テーブルから受注番号を引く」
「そうです」
「それなら受注情報の取り込み時に電話番号とメールアドレスを検索したらどうだろう」
「見つかったら顧客情報もフィールドに入りますね」
「見つからなかったら」
「新規です。顧客番号以外を埋められます」
社長はコーヒーを飲みながら黙って考える。
「テキストの加工はどうする」
「候補は ActivePerl です。でも経験はないので調べたいです」
「じゃあまず私の LaVie を渡すよ。そこで構築してから店長端末にしたらいい。かおりちゃんにはそれまで待ってもらおう」
「FileMaker Pro のほうはどうしますか」
「それくらい私がやる。だからまず設計を詰めよう」
数日後にパソコンの入れ替えが行われてメールの設定が移された。それからデスクトップに妙なものがあることに気が付いた。「parse.pl」と「楽々CSV.bat」だ。なにこれ。
「発送フォルダを受注入力にまわすんですよね。そのときにこの楽々CSV.bat をダブルクリックします。そうするとデスクトップに新しいファイルがふたつ出てきます。それを共有で送ってください」
受注メールの締め切り時間は2時。ちょうど今だ。そういうわけで、まずメールをテキストファイルにして、それから BAT を実行してみる。すると juchu.csv と item.csv が出てきた。
「これを送るんですね。そうしたらどうなりますか」
「そうしたら美智子さんがこれをFileMakerにインポートします。juchu.csv から先に、こうです」
そう言って手取り足取り、島田さんが手順を説明し始める。
「受注管理画面に未確定の受注レコードがたくさん現れました。これを開くと新しい楽々受注入力画面になります。社長とふたりで徹夜して作りました。顧客番号以外のすべての項目が入力済みです。もしリピートなら顧客番号も入ります。念のため入力フィールドの下に顧客情報がテキスト表示されてます」
裕太さんと美香さんは腕を組んでうなずいている。聞いていたのだろう。
「仕事が楽になりましたので、がんばって売りましょう」
見たこともない笑顔でそう言った。
parse.pl
----------------------------------------
#!/usr/bin/perl
# 楽々受注メール一括CSV変換スクリプト ver.3
use strict;
# 1. 出力するCSVファイルを開く
open(OUT_JUCHU, "> juchu.csv") || die "juchu.csvが開けません: $!";
open(OUT_ITEM, "> item.csv") || die "item.csvが開けません: $!";
# 2. 「発送」フォルダ内のテキストファイルを順次読み込む
my $dir_path = './発送';
opendir(DIR, $dir_path) || die "フォルダが開けません: $!";
my @files = grep { /\.txt$/i } readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
my $full_path = "$dir_path/$file";
open(IN, $full_path) || next;
# ワーク変数の初期化
my ($juchu_no, $date, $name, $zip, $address, $tel, $mail, $pay) = ('') x 8;
my @items = ();
while(<IN>) {
# 改行コードの削除(WindowsのCRLF対策)
s/\r?\n$//;
# カンマが入っているとCSVが崩れるので、全角の「,」に置換しておく
s/,/,/g;
# データの切り出し(正規表現パターンマッチ)
if (/【受注番号】\s*(.*)/) { $juchu_no = $1; }
elsif (/【注文日時】\s*(.*)/) { $date = $1; }
elsif (/【お名前】\s*(.*)/) { $name = $1; }
elsif (/【郵便番号】\s*(.*)/) { $zip = $1; }
elsif (/【住所】\s*(.*)/) { $address = $1; }
elsif (/【電話番号】\s*(.*)/) { $tel = $1; }
elsif (/【メールアドレス】\s*(.*)/) { $mail = $1; }
elsif (/【お支払い方法】\s*(.*)/) { $pay = $1; }
# 商品情報の切り出し(複数あるので配列にためる)
elsif (/【商品番号】\s*(.*)/) {
my $item_no = $1;
my $item_name = <IN>; $item_name =~ s/\r?\n$//; $item_name =~ s/【商品名】\s*//; $item_name =~ s/,/,/g;
my $price = <IN>; $price =~ s/\r?\n$//; $price =~ s/【単価】\s*//; $price =~ s/,/,/g;
my $qty = <IN>; $qty =~ s/\r?\n$//; $qty =~ s/【数量】\s*//; $qty =~ s/,/,/g;
push(@items, "$juchu_no,$item_no,$price,$qty");
}
}
close(IN);
# 3. CSVに1行ずつ書き出し(Excelでそのまま開けるようにダブルクォーテーションで囲む)
if ($juchu_no) {
print OUT_JUCHU "\"$juchu_no\",\"$date\",\"$name\",\"$zip\",\"$address\",\"$tel\",\"$mail\",\"$pay\"\n";
foreach my $item_line (@items) {
# データの各要素をクォーテーションで囲む
my @parts = split(/,/, $item_line);
print OUT_ITEM "\"$parts[0]\",\"$parts[1]\",\"$parts[2]\",\"$parts[3]\"\n";
}
}
}
close(OUT_JUCHU);
close(OUT_ITEM);
print "変換が完了しました!\n";
exit;
----------------------------------------
楽々CSV.bat
----------------------------------------
cd Desktop
perl parse.pl




