
perlを用いた特定文字列間の抽出方法について
下記のテキストファイル、test1.logからstart〜end間を抽出するpealを作ろうと思っています。
$datafile="test1.log";
open(FH, $datafile);
@list = <FH>;
while (<FH>) {
'print if /^start$/ .. /^end$/';
}
ですが、実行してもエラーにはなりませんが何も出力されません。
どこに問題があるのかが分かりません。
最終的にはカレントディレクトリにある複数のtest1.logと同様の.logファイルを
一括で処理したいと思っています。
test1.logファイルの内容
start
aaa
bbb
ccc
end
eee
fff
ggg
分かる方がいらっしゃいましたら、お知恵をお借りしたくよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
> @list = <FH>; # ファイルポインタがファイルの末尾に移動
> while (<FH>) { # ポインタがファイルの末尾なのでループを実行せずに終了
> print if /^start$/ .. /^end$/;
> }
ファイルの読み取りは1度だけですので、再オープンするか、読み取った @list を利用するなどが必要です。
(1) ファイルの再オープン
@list = <FH>;
open FH, $datafile or die;
while (<FH>) {
(2) @list の利用
@list = <FH>;
while ($_ = shift @list) {
(3) @list の作成を止める
# @list = <FH>;
while (<FH>) {
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サブスクリプトとのファイルハ...
-
FindFirstFileとFindNextFileで...
-
Perl 時間同士の差
-
C++でのテキストファイル読み込...
-
バッチファイルの作り方(CSV→...
-
Windowsで複数のファイルを同じ...
-
空白文字 \\f と\\v の違いに...
-
エクセルVBA コードが同じでも...
-
Pythonの再帰関数の動作の流れ...
-
大量メールの任意のヘッダだけ...
-
vba dir の相対パス
-
openした後、closeしないでプロ...
-
重複するデータを抽出できる秀...
-
至急お願いします。C言語で.img...
-
VBAでCSVファイルを途中行まで...
-
Perl Vlookupみたいに
-
全行読み込むには
-
csvファイルの横方向への改行に...
-
並び方、
-
drtファイルはどうしたら開...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
where can I buy snowbord in t...
-
close()で例外が投げられる理由
-
改行コードが勝手に
-
perlのflock関数でロックをかけ...
-
open中のファイルをrename
-
telnet接続
-
cgiログファイルの書き込みに余...
-
ファイルから読み込んだ文字を
-
die関数のエラー出力先について
-
テキストファイルの本文中に行...
-
ジョブショップスケジューリング
-
GD.pmで作成した画像を保存する...
-
巨大ファイルの行をを逆順に並...
-
ファイルの入出力
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
Windowsで複数のファイルを同じ...
おすすめ情報
my $datafile = $ARGV[0];
open(FH, $datafile) or die("error :$!");
while ( $_ = 〈FH〉) {
print $_ if /^start$/ .. /^end$/;
}
close(FH);
ありがとうございます。
(3)の方法を元にファイル名を引数として標準出力で
別ファイルとして保存することまで出来ました。
あとはこれをベースにしてカレントディレクトリの
拡張子logの複数ファイルを一括処理出来るよう改良
したいと思います。
test.pl test1.log 〉 test1.txt