dポイントプレゼントキャンペーン実施中!

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

A 回答 (7件)

(1)


「cppファイルやhファイルなどテキストファイルのステップ数を求める」という仕様にあいまいさがあると思います。

テキストファイルは、さらに、
Shift-JIS
UTF8
UTF16
など、文字コードの種類によって分類することができます。

まず、どんな種類のテキストファイルに対応しなければならないか、を決めてはどうでしょう。
それ以外のファイルは、テキストファイルであれ、バイナリファイルであれ、例外の対象になります。

(2)
ほんとうに例外処理をする必要がありますか?
仕様の条件がいろいろあると思いますが、
「例外処理はしない」というのも選択肢になると思います。
    • good
    • 0

とりあえず、参考URLに方法がいくつか載っています。


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

参考URL:http://d.hatena.ne.jp/oooooooo/20050113/p5
    • good
    • 0

とりあえず単純にやるなら、改行とタブ以外のコントロールコードを含まないファイルを対象にすればいいかと。



それで漏らしが出るようだったら、そのつど処理を追加していけばいいと思います。
    • good
    • 0

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

    • good
    • 0

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


調査対象が明確になるので。
    • good
    • 0

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

    • good
    • 0

バイナリかテキストファイルの区別よりも、真面目に処理するなら、自力か yacc, lex (bison, flex) などで構文解析して、C や C++ と思われるファイルかチェックするしかないと思う。

当然、コメントや空行などは除外しなきゃならないでしょうし、ただの { や } だけの行もどうなのって話になりますから。
    • good
    • 0

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