• 締切済み

【至急:C言語】cppファイルやhファイルなどテキストファイルのステッ

【至急:C言語】cppファイルやhファイルなどテキストファイルのステップ数を求めるプログラムに関して。 ファイルパスを標準入力させ、fopen()で開きます。その場合、選択されたファイルがテキストファイルでない場合の例外処理はどうすればできるでしょうか?テキストファイルといっても、冒頭に挙げたcpp, hのほかにtxt, ini, datなどさまざまです。fgets()などの関数を使ってステップを数えられるファイルを正常処理の対象とするプログラムを考えています。(できるだけ短い時間で多くの回答をいただきたく、Yahoo知恵袋でも同様の質問を投稿させていただいております)

みんなの回答

回答No.7

(1) 「cppファイルやhファイルなどテキストファイルのステップ数を求める」という仕様にあいまいさがあると思います。 テキストファイルは、さらに、 Shift-JIS UTF8 UTF16 など、文字コードの種類によって分類することができます。 まず、どんな種類のテキストファイルに対応しなければならないか、を決めてはどうでしょう。 それ以外のファイルは、テキストファイルであれ、バイナリファイルであれ、例外の対象になります。 (2) ほんとうに例外処理をする必要がありますか? 仕様の条件がいろいろあると思いますが、 「例外処理はしない」というのも選択肢になると思います。

  • R32C
  • ベストアンサー率39% (115/290)
回答No.6

とりあえず、参考URLに方法がいくつか載っています。 しかし、この課題そのものがいかがなものかと思います。 使うことを目的とするなら かぞえチャオ あたりを使えばよいです。 研修目的だとするなら、バイナリ等の判定は、課題として不要のように 思います。 まぁ、UNIX環境(WindowsならCygwin等)で、fileコマンドを呼びだして判定することが可能かもしれま せんが、そういう回答でいいんでしょうか?

参考URL:
http://d.hatena.ne.jp/oooooooo/20050113/p5
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.5

とりあえず単純にやるなら、改行とタブ以外のコントロールコードを含まないファイルを対象にすればいいかと。 それで漏らしが出るようだったら、そのつど処理を追加していけばいいと思います。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

そもそもファイル種別というのは「扱うプログラム側の解釈/都合」に過ぎませんから、中身を見ずして「実際にそのファイルがテキストファイルとして扱えるか否か」を判断するのは不可能です。

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.3

調査目的なんだったら、対象を拡張子で判別しますね。 調査対象が明確になるので。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

そもそも「テキストファイル」と「テキストファイルでないファイル」ってどう区別するの?

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

バイナリかテキストファイルの区別よりも、真面目に処理するなら、自力か yacc, lex (bison, flex) などで構文解析して、C や C++ と思われるファイルかチェックするしかないと思う。当然、コメントや空行などは除外しなきゃならないでしょうし、ただの { や } だけの行もどうなのって話になりますから。