重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

教えてください。
読み込んだファイル内にある空行・コメント行・処理行を一つのスクリプトで表示する書き方をおしえてください。
超初心者なので
今のところ、ファイルのオープンしかできていません。
#ファイルをオープンします
open(F,"upload.cgi")|| die "upload.cgiをオープンできません:$!\n";
#ファイルを読みます
while(<F>){
#内容を表示
print;
}
#ファイルを閉じます
close(F);

どこで、何の処理をしているかもコメントしていただけると助かります。
よろしくお願いします。

A 回答 (2件)

yatokesaさんの書いてた," "を含むような一般的な文についてのコメント


の抜き出しは,ちょっと強引な書き方ですが,次のような正規表現でできないでしょうか?

/^([^\"\#]*\"[^\"]*\")*[^\"\#]*(\#.*)$/;
print "$+\n";

ちなみに,
$_ = "\"not comment # not comment\" not comment \"not comment\" # comment\"comment\"#comment";
$_と,これに対する上の正規表現で抜き出した$commentを表示させると,
入力
"not comment # not comment" not comment "not comment" # comment"comment"#comment
コメント
# comment"comment"#comment
となります.

yatokesaさんの書いて下さったのと組み合わせて使ってください.

正規表現の説明ですが...
[^\"\#]* : "と#以外の繰り返しにマッチ
\"[^\"]*\" : "で囲まれた領域にマッチ
([^\"\#]*\"[^\"]*\")*[^\"\#]* : "で囲まれた領域と,#を含まない文字列にマッチ
(\#.*)$ : コメントにマッチ. この前に上の正規表現が書いてあるので,この部分は"で囲まれてない#にマッチします. つまりコメントにマッチします.
$+は正規表現で最後にマッチした部分です.

厳密にチェックしてないので抜けがあるかもしれませんが,こんな感じでしょうか.
    • good
    • 0
この回答へのお礼

具体的に教えていただきありがとうございます。
まだ、記号を見慣れていないのと、置き換える処理がわからないので
難しいですが、がんばって習得していきます。
また、わからないところを質問すると思うので、その時は教えて下さい!

お礼日時:2002/06/19 19:46

空行の判定は length($_) == 0 か $_ eq ''


コメント行は、処理行の後にあるコメントもカウントするとなると少し面倒です。" " (ダブルクォーテーション)や ' ' (シングルクォーテーション)や / / パターン内、@# とかの # はコメントではないのでそれを判定しなければなりません。(正規表現でできるのかな?)
単純にコメントしかない行を判定するのなら、 /^[\s\t]*#/ で判定できます。
それ以外は処理行と言うことですね。
あとは、if 分で判定して、それぞれをカウントアップすればOKですね。
    • good
    • 0
この回答へのお礼

空行は結構かんたんに検索できるのですね!
本当に初心者なので、まだちょっとわからないですが、なんとかがんばってみます。ありがとうございます!

お礼日時:2002/06/19 19:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!