• ベストアンサー

Perlで読み込んだファイル内の行数の検索について

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

質問者が選んだベストアンサー

  • ベストアンサー
  • bilbo
  • ベストアンサー率100% (1/1)
回答No.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さんの書いて下さったのと組み合わせて使ってください. 正規表現の説明ですが... [^\"\#]* : "と#以外の繰り返しにマッチ \"[^\"]*\" : "で囲まれた領域にマッチ ([^\"\#]*\"[^\"]*\")*[^\"\#]* : "で囲まれた領域と,#を含まない文字列にマッチ (\#.*)$ : コメントにマッチ. この前に上の正規表現が書いてあるので,この部分は"で囲まれてない#にマッチします. つまりコメントにマッチします. $+は正規表現で最後にマッチした部分です. 厳密にチェックしてないので抜けがあるかもしれませんが,こんな感じでしょうか.

marumaru2828
質問者

お礼

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

その他の回答 (1)

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

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

marumaru2828
質問者

お礼

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

関連するQ&A