UOA のベンダーエージェント情報をパース?トークナイズ?するコードだけ試しに書いてみた。
プログラムっていうよりただの正規表現で、ぶっちゃけ俺は何もしてない。
あくまでサンプルとして書いたので $a 使いすぎとかそういうところは無視。
#! /usr/bin/perl
use strict;
use utf8;
while (<>) {
chomp;
my $str = $_;
utf8::decode($str);
$str =~ /(Bulk Order Deed Blessed) (重量: \d) (小口|大口) (\w+(?: ingot(?:s)?| leather)?) (高品質|標準) (個数: \d+)/igc;
my $a = $1;
my $b = $2;
my $c = $3;
my $d = $4;
my $e = $5;
my $f = $6;
utf8::encode($a);
utf8::encode($b);
utf8::encode($c);
utf8::encode($d);
utf8::encode($e);
utf8::encode($f);
print "\$1: [$a] \$2: [$b] \$3: [$c] \$4: [$d] \$5: [$e] \$6: [$f]";
while ($str =~ /\G \w((?:\w|\s)+: \d+)/gc) {
my $a = $1;
utf8::encode($a);
print " [$a]";
}
print "\n";
}
例えば布大口の巫女のデータをこのスクリプトに食わせると
$1: [Bulk Order Deed Blessed] $2: [重量: 1] $3: [大口] $4: [cloth] $5: [標準] $6: [個数: 20] [ バンダナ: 20] [ shirt: 20] [ skirt: 20] [ thigh boots: 0]
こんな風に分割して返してくれる。
UOAがクリップボードにコピーしてくれるデータって機械的に処理するのにやさしい形じゃないなぁ。
split() 一発で終わるような形でくれればいいのに。
それを簡単にパースしてくれる Perl ってすげー。
以下、俺メモ。
続きを読む