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ランキング
-
while(<ハンドラ>) {} で行数を...
-
AutoCADのスクリプト
-
オープンしたファイルで行の連結
-
cgiの投票回数制限設定について...
-
Perl で syntax error
-
perlで、文字列の中から何番目...
-
perlのflock関数でロックをかけ...
-
文字列をカウントする方法
-
ファイル全てを .xlsm に変更し...
-
一定時間が経過したフォルダの削除
-
csvファイルの横方向への改行に...
-
画像アップロード機能を追加し...
-
batファイルでrenameができませ...
-
while文がうまく動かない
-
VBAでCSVファイルの特定行を書...
-
MATLABのm-fileについて
-
配列のサイズを動的に拡張
-
ディレクトリのファイル作成を...
-
ANSI Cでファイル名、ディレク...
-
VB6.0でDB接続する際に切断時の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
perlのflock関数でロックをかけ...
-
改行コードが勝手に
-
巨大ファイルの行をを逆順に並...
-
オープンしたファイルで行の連結
-
Perl で syntax error
-
where can I buy snowbord in t...
-
open中のファイルをrename
-
perlを用いた特定文字列間の抽...
-
Perlで他サイトの情報を取得し...
-
die関数のエラー出力先について
-
ハッシュにファイルハンドル
-
サブスクリプトとのファイルハ...
-
テキストファイルの本文中に行...
-
perlで大容量CSVのsort方法につ...
-
フォルダが開かなくなりました。
-
AutoCADのスクリプト
-
ジョブショップスケジューリング
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
おすすめ情報
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