• ベストアンサー

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

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

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

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.3

>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

UNIX環境であれば、 wcコマンドをパイプを使って取得するとか。 ※環境は必ず明記すべき。 それ以外の方法は便利な関数があるわけではないので ファイルを開いて自分で数えるのみ。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

右端での自動折り返しを考慮しないものとして、テキストファイル中の改行コードの数を数えれば良いのでは。 行数の変数を0に設定。 以下、ファイルの最初から最後まで繰り返し。  1文字読み込み。  改行コードだった場合は、行数の変数に1を加算。 とか。

関連するQ&A