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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- Perl Perlでファイルの末尾から指定文字列を検索してファイルに吐き出したい 4 2022/04/04 16:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- 数学 n乗はどうなったのでしょうか 1 2023/01/31 19:26
- 数学 複素数についての質問です。 1+iの主値を求める問題で回答が以下のようになっていました。 1+i = 5 2022/07/22 04:04
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
close()で例外が投げられる理由
-
batファイルでrenameができませ...
-
ExcelをCSV書き出す場合のシー...
-
バッチファイルの作り方(CSV→...
-
VBAでCSVファイルの特定行を書...
-
fopenでディレクトリ内の全ファ...
-
VBAで巨大なファイルの途中から...
-
awkスクリプトでダブルクォーテ...
-
ファイル名を複数個配列で確保...
-
VBAでCSVファイルを途中行まで...
-
Perl:Unicodeプロパティ作れない
-
同じようなソースなのですが片...
-
エクセルVBAで素数だけを出力す...
-
【C++/CLI】ファイルオープンに...
-
openした後、closeしないでプロ...
-
Javaのコーディングスタイル
-
重複するデータを抽出できる秀...
-
python renameについて
-
ReadLineでの読み出し行を指定する
-
JSP URLに表示される拡張子 .jsp
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
改行コードが勝手に
-
perlを用いた特定文字列間の抽...
-
Perl で syntax error
-
ハッシュにファイルハンドル
-
where can I buy snowbord in t...
-
open中のファイルをrename
-
GD.pmで作成した画像を保存する...
-
perlで複数のファイルの処理に...
-
while(<ハンドラ>) {} で行数を...
-
die関数のエラー出力先について
-
パスワード自動生成スクリプト...
-
Perlでファイル出力時にデッド...
-
クリックを何回もされて、重複...
-
perlのflock関数でロックをかけ...
-
PICでFatFsでオープンした内容...
-
cgiの投票回数制限設定について...
-
ファイルから読み込んだ文字を
-
データの並べ替え
-
テキストファイルの本文中に行...
おすすめ情報
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