解決済み

テキストファイルの行数を取得する方法(C言語

  • すぐに回答を!
  • 質問No.5130404
  • 閲覧数19568
  • ありがとう数0
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 63% (7/11)

C言語でテキストファイルのトータル行数を取得する関数又はその方法を教えてほしいのですが。

宜しくお願いします。

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

  • 回答No.3

ベストアンサー率 54% (130/237)

>C言語でテキストファイルのトータル行数を取得する関数又はその方法を教えてほしいのですが。

 3つ前の質問 http://okwave.jp/qa5129642.html 質問文中のソース冒頭 line2++; 部分(下に修正したもの掲載)で、

・テキストファイルの行数を、ファイルの頭から1行ずつ「読み捨て」て、それをファイル終端まで繰り返すことで数えています。

 ここでは、「全体として、どの位メモリを確保したらいいか」という動機から、超みっともない?こと(読み捨て、1ファイルを2度オープン)をしています。
  (本人には、http://okwave.jp/qa5114580.html の No.3 で指摘済み)
 1行ずつ読み込みながら、1行分のメモリを追加確保していくのが普通だと思うのですが・・。

・エディタでファイルを開けば判ることを、わざわさプログラムにする理由はなく、(質問文には現れない)主目的との「兼ね合い」でご質問された、と思います。
・「何々したいから、プログラムの冒頭で、ファイルのトータル行数を取得しておきたい」の「何々」部分を明らかにすれば、「兼ね合い」を解消する技法について「回答」が得られるかもしれません。

もし、上の質問者様と同様な動機でしたら、少なくとも、「エディタでファイルを開き、行数を確認」し、プログラム実行時にコマンドラインで、argv[ 2 ] に行数が入るようにして下さい。
超みっともない「読み捨て、1ファイルを2度オープン」は不要となります。

プログラムでは、line2 = atoi( argv[ 2 ] ); とすることで、行数を得ることができます(ファイル名は、argv[ 1 ] で)
----------------------------------------------
直球回答

int line2 = 0;
char buf[ 1024 ]; // 最大レコード長より大きいこと
FILE *fp;

if( NULL == ( fp = fopen( argv[ 1 ], "r" ) ) ){

 printf( "%s が開けません\n", argv[ 1 ] );

 return( -1 );
}
while( NULL != fgets( buf, 1024, fp ) ){

 line2++;
}
fclose( fp );

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 66% (138/209)

UNIX環境であれば、
wcコマンドをパイプを使って取得するとか。

※環境は必ず明記すべき。

それ以外の方法は便利な関数があるわけではないので
ファイルを開いて自分で数えるのみ。
  • 回答No.1

ベストアンサー率 44% (5539/12317)

右端での自動折り返しを考慮しないものとして、テキストファイル中の改行コードの数を数えれば良いのでは。

行数の変数を0に設定。
以下、ファイルの最初から最後まで繰り返し。
 1文字読み込み。
 改行コードだった場合は、行数の変数に1を加算。

とか。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


OKWAVE若者応援スペシャル企画

ピックアップ

ページ先頭へ