
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ランキング
-
ファイルから読み込んだ文字を
-
where can I buy snowbord in t...
-
close()で例外が投げられる理由
-
batファイルでrenameができませ...
-
パスから最後のディレクトリだ...
-
ReadLineでの読み出し行を指定する
-
エクセルVBA コードが同じでも...
-
sprintfについて
-
vba dir の相対パス
-
perl内でPHPを動かす?
-
Perlで特定行から特定行までを...
-
FindFirstFileとFindNextFileで...
-
空白を含むディレクトリにある...
-
perlで、後ろの行を読んで、前...
-
Perl<->Oracle間での文字化けに...
-
JSP URLに表示される拡張子 .jsp
-
perl ファイルが開かない
-
文字コードの変換(Shift-JISか...
-
unlink 、renameが使えない理由
-
C言語で特定の行を抽出する方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
改行コードが勝手に
-
このスクリプトの意味を教えて...
-
レコードの書込み判断
-
携帯でのカウンタ
-
map関数についての質問です
-
perlのflock関数でロックをかけ...
-
cgiでdocument.writeの書き出し
-
GD.pmで作成した画像を保存する...
-
マッチ演算子に変数をはさんで...
-
GDモジュールについて
-
プログラムのヒントを下さい
-
DBMオープン時の警告
-
where can I buy snowbord in t...
-
perlの最適化に取り組む際のa.o...
-
Perl変数から外部プログラムの...
-
Perlの書き方
-
HTMLから自動的に文章取得
-
cgiの投票回数制限設定について...
-
perlを用いた特定文字列間の抽...
おすすめ情報
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