皆さんのお知恵をお貸し頂ければ幸いです。
Perlで以下のようなことをしたいと考えています。
例えば、次のようなテキストファイルがあったとします。
example.log
==================================
aaaa
hogehoge
test
okok
perl
script
==================================
上記ファイルを読み込んで、「hogehoge」から「perl」の間に挟まれた行だけ抜き出したいのです。
イメージとしては、読み込んだファイルを配列に入れて、一行づつ読ませ、キーワード「hogehoge」が現れたらそこでフラグを立て、それ以降の行を表示し、キーワード「perl」が現れた時点で表示を止めるという処理になるのかな?と思っています。
このような場合、どういう風にすればいいのでしょうか?
恐れ入りますが、ご教授頂ければ幸いです。
それでは、どうぞよろしくお願い致します。
No.3ベストアンサー
- 回答日時:
> 一行づつ読ませ、キーワード「hogehoge」が現れたらそこでフラグを立て、それ以降の行を表示し、キーワード「perl」が現れた時点で表示を止めるという処理になるのかな?と思っています。
それでいいと思いますよ?これをそのままコード化すると、こんな感じでしょうか。(No.1さんのとはちょっと結果が違います。)
open FH, "example.log" or die $!;
$flag = 0;
while ($data = <FH>) {
chomp $data;
if ($data eq "hogehoge") { $flag = 1 }
elsif ($data eq "perl") { $flag = 0 }
elsif ($flag) { print "$data\n" }
}
close FH;
で、もっと略したいPerlな人だとこんな感じ。Perl独特の記法がふんだんに使われているので、勉強するには不向きかもしれませんが^^;
open FH, "example.log" or die $!;
while (<FH>) {
print if /^hogehoge$/ .. /^perl$/ and !/^(?:hogehoge|perl)$/;
}
close FH;
※インデントに全角空白を使っているので、コピーする場合はタブなどに置換して下さい。
こちらもありがとうございます。
両方の方法で目的通りの動きをすることが確認出来ました。
ただ、後の方の構文はNo2さんが教えて下さったのと同様に、勉強不足の為なぜ動くのかがわかっていない次第です^^;
No.2
- 回答日時:
#Perlな人は .. 演算子を使ってこう書くかも知れません
while (<IN>){
if ($_ eq "hogehoge\n" .. $_ eq "perl\n"){
print;
}
}
#目的の位置まで読み飛ばして、目的の最後のキーワードが
#見つかり次第ループを抜けるならこう書くこともできます
1 while <IN> eq "hogehoge\n";
while(<IN>){
print;
$_ eq "perl\n" and last;
}
#もっとデータが大量にある場合に高速で抜き出すには
#read関数を使って書くこともできますが、複雑なので
#割愛します。
お世話になります。
こちらの内容でもいけるようです。
ただ、構文が理解出来ていない為、なぜ動くのがわからないのが難点です^^;;
ともあれ、ありがとうございました。
No.1
- 回答日時:
Perlな人はもっと略したいでしょうけど素直に書けば。
$flag=0;
open(FH, "< ./example.log");
while($data = <FH>){
print "$data\n" if $flag==1;
chomp $data;
$flag=1 if $data eq "hogehoge";
$flag=0 if $data eq "perl";
}
close FH;
参考URL:http://www.rfs.jp/sitebuilder/perl/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- Perl Perlでファイルの末尾から指定文字列を検索してファイルに吐き出したい 4 2022/04/04 16:15
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(プログラミング・Web制作) 【python】Excelファイルを読み込む際の日付の表示形式を任意にする 2 2022/11/24 14:21
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Perl Windows10においての『Perl』のプログラムについて 1 2022/05/09 16:04
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
perlを用いた特定文字列間の抽出方法について 下記のテキストファイル、test1.logからst
Perl
-
perlで、後ろの行を読んで、前の行に書き込むには?
Perl
-
Perlで特定文字列から特定文字列までを抜き出したい
Perl
-
-
4
Perlで行頭にある文字が含まれている行を全部削除して詰めたい
Perl
-
5
Perlで別ファイルから文字列の抽出
Perl
-
6
perlにて2つのファイル比較
Perl
-
7
Perlで空白行を削除
Perl
-
8
Perlで フォルダ内の全てのファイルを別のフォルダにコピーするには
Perl
-
9
perlを使用しての特定行抽出について
Perl
-
10
perl でエラー:Wide character in・・・とは何がいけないのでしょう?
Perl
-
11
Perl で syntax error
Perl
-
12
ディレクトリのファイル数取得
Perl
-
13
行を指定して削除する方法PERL
Perl
-
14
二次元配列における要素数のはじき出し
Perl
-
15
複数ファイルの読み込みについて
Perl
-
16
ひとつの命令を複数行に記述
Perl
-
17
perlプログラム 外部複数ファイルの読み込み処理について
Perl
-
18
PerlでのUseless use...
Perl
-
19
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
20
perlで複数のファイルの処理について悩んでいます。
Perl
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVデータの編集の際の重複チェ...
-
Perlで特定行から特定行までを...
-
perlでcsvファイルを読む(ダブ...
-
Perlでの重複要素カウントにつ...
-
awkスクリプトでダブルクォーテ...
-
window.open でのファイル指定方法
-
ListBoxのデータを高速でファイ...
-
C言語で特定の行を抽出する方法...
-
ReadLineでの読み出し行を指定する
-
VBAでCSVファイルを途中行まで...
-
パスから最後のディレクトリだ...
-
ヒアドキュメントの書き方
-
Edge スクレイピング
-
ExcelをCSV書き出す場合のシー...
-
close()で例外が投げられる理由
-
配列の中に重複文字列があるか...
-
オープンしたファイルで行の連結
-
utf-8のCSVをshift_jisに変換し...
-
python renameについて
-
openした後、closeしないでプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで特定行から特定行までを...
-
perlでcsvファイルを読む(ダブ...
-
BBCode削除&改行をサニタイジ...
-
Perlで空白行を削除
-
Perlの初心者です。2重ループ...
-
MATLAB std::exceptionエラー
-
ファイルの3行目までを出力したい
-
perlでファイルの比較
-
pythonでの実績データの処理プ...
-
cgiのログの書き方
-
先頭の単語が一致した時のデー...
-
書き込み時に勝手にクリアさせ...
-
エラーチェック、ファイルに特...
-
Argument "\\\\n" isn't numeri...
-
CSVファイルのデータの行数を取...
-
perl:パターンマッチを使ったif...
-
Pythonでegrep機能をつかいたい
-
batファイルでrenameができませ...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
おすすめ情報