自己紹介

自分の写真

朝ネスのマスターやってる人。
巷では「けもネス」って呼ばれてるけど、「朝ネス」です。
どうか間違えないでください。

2015年2月17日火曜日

perlで配列にファイルオープン


なんとなくリッチにメモリをバカ食いしながら処理をする。
perlで配列にファイルオープン。各行を配列にぶち込みたい時に。

①まずファイルオープンします。

open( DATAFILE , "<" , $FilePath ) or die('Error:'.$!) ;


②次に配列に入れます。

my @MultipleLines = <DATAFILE> ;


③終わり。


簡単ですね。

しかしこれでは文末にみんな大好き\n(改行コード)が入ってしまいます。
では文末の\nを取り除いたバージョン、いましょう。


①まずファイルオープンします。

open( DATAFILE , "<" , $FilePath ) or die('Error:'.$!) ;


②次に配列に入れます。<DATAFILE>は何故か配列扱いされるので、
 mapで文末の\nを空文字に置換します。

my @MultipleLines = map { $_=~ s/\n$// ; $_ } <DATAFILE> ;


③終わり。


これで簡単に配列に展開できましたね。


おまけ



lookbehind assertion is not fixed length
後読みが固定長文字列じゃないよ!(訳:後読みに量指定とか付けんなや!)
ちなみにPerlでは無理です。仕様が許さない限りね。
そして月日が経ち……
5.10新機能から「\K」実装。以下に例を示す。


echo 'dsdg = fsefe;//eiya' | grep -P --color '(?<=(//.*))ya'    :実行できない
↓代わりに
echo 'dsdg = fsefe;//eiya' | grep -P --color '((//.*)\K)ya'        :実行できる
「ya」に色がつく

echo 'dsdg = fsefe;//eiya' | grep -P --color '(?<=(fs|ds)).'    :実行できる(できる)
↓(できるけど)代わりに
echo 'dsdg = fsefe;//eiya' | grep -P --color '((fs|ds)\K).'        :実行できる
dとeに色がつく


以上のように「肯定的」可変長後読みが可能に。
しかし「否定的」可変長後読みは依然としてダメ。
まあ、私が知らないだけかもね。



perlは数日で簡単に正規表現を主体とした処理が書ける。
初心者になるハードルは低いという事ですね。
中級者以上になるつもりはないけど。
これで大規模プログラム組むとかはつらい。
特に関数がphp程に日本語訳が充実してないからつらい。

0 件のコメント:

コメントを投稿