●基本編 正規表現の初歩
タイトルも簡潔になって、ちょっと先走った感もある前エントリ
一行ずつ置換していくプロセスとゆーほどのものではない、の中身を簡単に書いてみます。
サンプルは例によって吉里吉里でも使おうかと
PerlをPerl-Practical Extraction and Report Language-実用データ取得作成言語 ただし後付
たらしめる正規表現による強力なパターンマッチ。(あと変数とかてきとーに書いても動くいい加減さ
このお陰で文字列=スクリプトを別の法則のスクリプトに変えること等が非常に楽です。
まあ私がやっているのは非常に初歩的なことなのですが、些少のお目汚しをば
$line =~ /hogehogehoge/;
"=~" マッチ演算子 を使って "//" で挟まれた文字列を比較・置換するのが基本です。
また、その際に文字列を "()" で囲むと、後方参照で文字列を取り出すことが出来ます。
例えば
@img layer=1 storage=ev_c_houduki_01 left=800 top=20 @img layer=2 storage=ev_c_eri left=-900 top=180
こんなスクリプトがあったとすると
if ( $line =~ /\@img/ ){ で文を判定。Nスクでいうスプライトかなーと当たりを付け
$line =~ /layer=(\d) storage=(\w*?) left=(\d*) top=(\d*)/;
とマッチさせると
それぞれ スプライト(レイヤ?)番号 $1 、ファイル名 $2、x座標 $3 、y座標 $4 に対応します。
ちなみに
"\w" はアルファベットと数字(use utf8; 等をすると漢字等の多バイト文字にもマッチするので注意)
"\d" は数字。また"*" は直前の文字が任意の回数続くことを意味します。
これらの正規表現は2ch専ブラなどでも使えるので、覚えておいて損はないでしょうか
閑話休題、上記で取り出した文字列を使ってNスクのコマンドを記述します。
↓すると、サンプルがprint OUT "lsp $1,\"$2.jpg"\",$3,$4";文字列中の " の前には\を付けてエスケープします
lsp 1,"ev_c_houduki_01.jpg",800,20

と変換されます。
色々ややこしい処理もありますが、
基本は全てこの応用です。
ということで次回応用編~スプライト移動~
仮定も未定!
ちなみにかにしのでの立ち絵・スプライト?処理は…
$line =~ /^%48%([0-9A-Fa-f][0-9A-Fa-f])%([0-9A-Fa-f][0-9A-Fa-f])%([0-9A-Fa-f][0-9A-Fa-f])%([0-9A-Fa-f][0-9A-Fa-f])%([0-9A-Fa-f][0-9A-Fa-f])(?:%00){5}%[0-9A-Fa-f][0-9A-Fa-f](.*?)%00/ )
orz