初めて投稿させていただきます、perl & cgi 初心者です。
早速ですが、20万行程度(1列80文字)ある英数字の混在文(ファイルサイズは約7メガ)から、
ある法則に従った数字部分のみを抽出する処理を考えています。
---以下、読み込みたいファイル内容-----------------------------------------
〜略〜
#outgoing#
ht-1stat ht-1stok ht-altat ht-altok ans-comp cong
0000000000 0000000000 0000000000 0000000000 0000000000 0000000000
dur-absy dsz ratpt usg-bsy usg-ans usg-idle
0000000000 0000000000 0000000000 00000.00 00000.00 00058.00
usg-mnt usg-inst usg-flt usg-cns inst ins
00000.00 00058.00 00000.00 00000.00 0000000058 0000000058
flt blk
0000000000 0000000000
〜略〜
#atm-qos1#
cell-thri cell-thro
00000000000002724459 00000000000002741605
cell-dsci cell-dsco
00000000000000000000 00000000000000000000
〜略〜
05/06/27_15:03:47 ABC01DE3 FG2HIJK1
------------------------------------------------------------------------
上記内容と同等のものが計20万行あり、20万行の中から数字の連続した部分
(上の例では、0000000000や00000.00、00000000000000000000など)を抜き出すことを目標にしています。
しかし、ファイルサイズが重いせいか、パターンマッチをするまでのファイルの読み込み処理
に、非常に時間がかかっています。(ブラウザで読み込み結果を表示するのに2,3分かかる)
また、以下の環境とソースで行っています。
【サーバ環境】
・windowsNT 4.0
・PC 日立 FLORA 310(DL9) 330(DC9) 128Mメモリ
・サーバソフト AN_HTTPD Ver1.42m
【読み込み処理ソース】
if (!open(TXT, "+<$txtfile")) {
&print_error("ファイルが開けません");
} else {
@txt=<TXT>;
close(TXT);
foreach $eachtxt (@txt) {
if ($line1 =~ /[^a][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/i
or $line1 =~ /[^a][0-9][0-9][0-9][0-9][0-9]\.[0-9][0-9]/io){ #マッチする行の検索
〜〜配列へ挿入処理:省略〜〜
}
}
}
サーバーがしょぼいのは重々承知ですが、スペック向上できない環境にあります。
この環境下で、高速に読み込み&高速パターンマッチを行う別の手段があれば、
ご教授をよろしくお願いします。