皆さんのお知恵をお貸し頂ければ幸いです。
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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
perlを用いた特定文字列間の抽出方法について 下記のテキストファイル、test1.logからst
Perl
-
perlで、後ろの行を読んで、前の行に書き込むには?
Perl
-
Perlで行頭にある文字が含まれている行を全部削除して詰めたい
Perl
-
-
4
Perlで特定文字列から特定文字列までを抜き出したい
Perl
-
5
Perlで別ファイルから文字列の抽出
Perl
-
6
Perlで空白行を削除
Perl
-
7
perlにて2つのファイル比較
Perl
-
8
ひとつの命令を複数行に記述
Perl
-
9
複数ファイルの読み込みについて
Perl
-
10
特定の文字列を削除
Perl
-
11
Perlで フォルダ内の全てのファイルを別のフォルダにコピーするには
Perl
-
12
perlを使用しての特定行抽出について
Perl
-
13
perl でエラー:Wide character in・・・とは何がいけないのでしょう?
Perl
-
14
ディレクトリのファイル数取得
Perl
-
15
二次元配列における要素数のはじき出し
Perl
-
16
行を指定して削除する方法PERL
Perl
-
17
PerlでのUseless use...
Perl
-
18
perlプログラム 外部複数ファイルの読み込み処理について
Perl
-
19
perlで複数のファイルの処理について悩んでいます。
Perl
-
20
perlで複数行のデータを自由に扱い計算させたい
Perl
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで特定行から特定行までを...
-
Pythonでegrep機能をつかいたい
-
batファイルでrenameができませ...
-
Pythonで非日本語のUnicode文字...
-
Perl の「stringify」の意味に...
-
Excelのマクロで改行を含んだテ...
-
HTMLのフォームで画像と文...
-
sprintfで10進数を桁数指定で16...
-
ListBoxのデータを高速でファイ...
-
Windowsで複数のファイルを同じ...
-
sysread と read はバイナリ読...
-
csvファイルの横方向への改行に...
-
Edge スクレイピング
-
PerlからのCSV出力
-
openした後、closeしないでプロ...
-
VBA テキストファイルを読み取...
-
CSVが可変長の場合の検索方法
-
bashシェルについて
-
where can I buy snowbord in t...
-
ReadLineでの読み出し行を指定する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで特定行から特定行までを...
-
perlでcsvファイルを読む(ダブ...
-
Perlで空白行を削除
-
Perlの初心者です。2重ループ...
-
ファイル分割2
-
pythonでの実績データの処理プ...
-
Perlを利用してテキストフ...
-
先頭の単語が一致した時のデー...
-
perlでファイルの比較
-
MATLAB std::exceptionエラー
-
文字列の比較の仕方が分かりません
-
データベースを使わず、テキス...
-
perlにてスペースの削除に苦労...
-
CSVファイルをperlプログラムで...
-
書き込み時に勝手にクリアさせ...
-
perl:パターンマッチを使ったif...
-
perlで自動採番
-
FTP接続時失敗時、接続先名をcs...
-
パターンマッチングにおいて変...
-
ファイルの3行目までを出力したい
おすすめ情報