
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 );
No.2
- 回答日時:
UNIX環境であれば、
wcコマンドをパイプを使って取得するとか。
※環境は必ず明記すべき。
それ以外の方法は便利な関数があるわけではないので
ファイルを開いて自分で数えるのみ。
No.1
- 回答日時:
右端での自動折り返しを考慮しないものとして、テキストファイル中の改行コードの数を数えれば良いのでは。
行数の変数を0に設定。
以下、ファイルの最初から最後まで繰り返し。
1文字読み込み。
改行コードだった場合は、行数の変数に1を加算。
とか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
C言語でCSVファイルの行数を読み取りたい
C言語・C++・C#
-
文字列から空白を取り除きたいのですが
C言語・C++・C#
-
Cでファイルの行数をカウントするには
C言語・C++・C#
-
-
4
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
5
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
6
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
7
fgets関数のEOFの扱い方について
C言語・C++・C#
-
8
C言語 配列の長さの上限
C言語・C++・C#
-
9
ファイル内のデータを1行削除する方法
C言語・C++・C#
-
10
改行を読み飛ばす
C言語・C++・C#
-
11
c言語で任意のファイルから読み込んだ単語の数をカウントする
C言語・C++・C#
-
12
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
13
CString から LPCTSTRの型に変換
C言語・C++・C#
-
14
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
15
char*を初期化したいのですが
C言語・C++・C#
-
16
int型の内容をbyteの配列にコピー
Java
-
17
画面を強制的に再描画させる方法
C言語・C++・C#
-
18
関数から配列を返すには?
C言語・C++・C#
-
19
構造体のメンバをfor文で回したい
C言語・C++・C#
-
20
ディレクトリの判別
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
VBSで指定行に挿入
-
freadでファイルを読み込んだ際...
-
c言語 2つのファイルを行ご...
-
バイナリファイルをテキストフ...
-
fgetsで2行目から文字化け
-
書き込んだファイルに改行が入...
-
テキストファイルの行数を取得...
-
どんなプログラムを書いても指...
-
C言語初心者の質問失礼します。
-
フルパスから最後のディレクト...
-
JavaScriptでコマンドプ...
-
Access クエリ実行が急に非常に...
-
Microsoft VBAで2GBを超えるフ...
-
ファイル名の先頭にアンダース...
-
Acccess レポートをグループ別...
-
csvファイルを開かずに文字を検...
-
ファイルやディレクトリの存在...
-
テキストファイルの最終行を削...
-
libssh2のインクルード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バイナリファイルをテキストフ...
-
ファイル内のデータを1行削除...
-
fgetsで2行目から文字化け
-
テキストファイルの行数を取得...
-
c言語 2つのファイルを行ご...
-
巨大なテキストファイル(可変...
-
ファイルへの落とし方について
-
ファイル名をチェックする方法。
-
【VB.Net】バイト型配列に読み...
-
続jファイルに文字列を書く
-
配列のメモリの確保
-
C言語での採番について
-
ファイル読み込みについて
-
(UWSC)このような場合、解決策...
-
ファイル関数について
-
C言語 ; で区切った文字を別...
-
VBSで指定行に挿入
-
winsock recvでの文字化け
-
freadでファイルを読み込んだ際...
-
VisualC++でのバイナリファイル
おすすめ情報