
---あああああああああああああ----------------
いいいいいいいいいい
ううううううううううううう
[2013/07/10 00:00:00] ええええ
[2013/07/10 00:00:01] おおおお
上記のようなデータが複数格納されたファイルを読み込み、出力が
---あああああああああああああ----------------
2013/07/10 00:00:00,ええええ
2013/07/10 00:00:01,おおおお
となるようなプログラムをperlで実現させたいと考えていますがうまくいきません。
文字列のマッチング等試してみましたが期待する結果が得られませんでした。
ご教授よろしくお願いします。
No.2ベストアンサー
- 回答日時:
いくらでも方法はあります。
例えば。
「行の先頭にある[XXXX] の中を取り出し、 XXXX , の置換する」
と考えれば
s/^\[([^]]*)\]/$1,/
※ \[ と \] の間にある 0個以上の[^]] (]では無い文字。[^の直後の場合、]をエスケープしなくても大丈夫) を () でグループ化
※ 置換内容は、$1で先にグループした部分を引用
となります。
なお、置換に失敗したときは偽になるので、置換に成功した行だけ出力すればよいので、
print OUT if( s/^\[([^]]*)\]/$1,/ ) ;
で十分です。
Perlの正規表現は強力で、いろんなことができます。
正規表現そのものもそうですが
「どうやったら目的のものを得られるか」、いくつかのパターンを覚えておくとよいでしょう。
http://perldoc.jp/docs/perl/5.16.1/perlretut.pod
http://perldoc.jp/docs/perl/5.14.1/perlre.pod
ありがとうございました。おかげさまで期待通りの結果を出力することができました。
perl自体初めてでしたので戸惑うことが多かったのですが、丁寧に解説していただきそれぞれの記号が持つ意味、正規表現の仕方の一端を理解することができました。
今後もperlを使用する場面が少なからずあると思うので、地道に勉強していきたいと思います。
今回は本当にありがとうございました。
No.1
- 回答日時:
具体的にどうやってだめだったのでしょうか?
例えば。
/[2013/07/10 00:00:00]/
みたいにしようとすると。
○[]は、「その中にある文字のうちのどれかにマッチ」という表現になるので、[という文字自体にはマッチしない
○ この場合 / は正規表現の区切りに使われているので、 / という文字列にマッチしない
となります。特殊な文字(メタ文字)は、\を付けると、その特殊な意味を失います
/\[2013\/07\/10 00:00:00\]/
また、区切りは、変更できます
m|\[2013/07\/10 00:00:00\]|
http://perldoc.jp/docs/perl/perlop.pod#Regexp32Q …
この回答への補足
早速の回答ありがとうございます。
マッチについてはまさにその部分で躓いておりました。ご助言いただいたことを参考に下のようなスクリプトをかいてみました。
open(IN,"in.txt") or die "失敗";
open(OUT,">out.txt") or die "失敗";
while (<IN>){
print OUT if /---/;
print OUT if /\[/ | s/[\[\].・]//g;
}
close(IN);
close(OUT);
結果:out.txt
---あああああああああああああ----------------
2013/07/10 00:00:00 ええええ
2013/07/10 00:00:01 おおおお
しかし、この記述の仕方では当然ながらカンマ区切りで出力することはできません。[が含まれる行だけを抽出して配列に格納し、それぞれ必要な要素に分割して出力しようとしましたが、記述の仕方等問題がありエラーになってしまいました。
そのあたりの方法についても教えていただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
Strawberry Perl for Windows ...
-
perlのプログラミング 部分入れ...
-
Perlでファイルの末尾から指定...
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルで提出とは?
-
Perlのエラーについてご教授く...
-
perlをバージョンアップしたら...
-
Perlで時間の計算
-
Wallpaper Engineでおすすめの...
-
Perl言語について。
-
perlで2次元配列をサブルーチ...
-
Strawberry Perl for Windows ...
-
#!/usr/bin/perlで書きだしたCG...
-
perl の open について教えてく...
-
INDIRECT 横に再度抽出したい
-
アルファベットに付いて質問し...
-
openした後、closeしないでプロ...
-
画像が表示でnull; this.src
-
VBA変数をFunction.VLookupの戻...
-
perlのflock関数でロックをかけ...
-
Perl の外部モジュールの利用方法
-
TeraPadエディターの操作方法に...
-
bashスクリプト
-
perlの構文でカンマの意味が分...
おすすめ情報