なんとなくリッチにメモリをバカ食いしながら処理をする。
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 件のコメント:
コメントを投稿