- ベストアンサー
テキストファイルの行数を取得する方法(C言語
C言語でテキストファイルのトータル行数を取得する関数又はその方法を教えてほしいのですが。 宜しくお願いします。
- みんなの回答 (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)
- bluecampus
- ベストアンサー率66% (138/209)
UNIX環境であれば、 wcコマンドをパイプを使って取得するとか。 ※環境は必ず明記すべき。 それ以外の方法は便利な関数があるわけではないので ファイルを開いて自分で数えるのみ。
- neKo_deux
- ベストアンサー率44% (5541/12319)
右端での自動折り返しを考慮しないものとして、テキストファイル中の改行コードの数を数えれば良いのでは。 行数の変数を0に設定。 以下、ファイルの最初から最後まで繰り返し。 1文字読み込み。 改行コードだった場合は、行数の変数に1を加算。 とか。