
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Excel(エクセル) エクセル マクロ テキストファイルを取り込む 複数の区切り文字で別々のセルに格納するには? 3 2022/08/10 21:10
- その他(プログラミング・Web制作) 複数のテキストファイルの結合方法 2 2022/05/14 23:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/15 16:33
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/16 14:36
このQ&Aを見た人はこんなQ&Aも見ています
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
C言語でCSVファイルの行数を読み取りたい
C言語・C++・C#
-
ファイル内のデータを1行削除する方法
C言語・C++・C#
-
-
4
文字列から空白を取り除きたいのですが
C言語・C++・C#
-
5
int型の内容をbyteの配列にコピー
Java
-
6
画面を強制的に再描画させる方法
C言語・C++・C#
-
7
Cでファイルの行数をカウントするには
C言語・C++・C#
-
8
char*を初期化したいのですが
C言語・C++・C#
-
9
charからLPTSTRへの変換方法
C言語・C++・C#
-
10
fgets関数のEOFの扱い方について
C言語・C++・C#
-
11
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
12
改行を読み飛ばす
C言語・C++・C#
-
13
C言語 配列の長さの上限
C言語・C++・C#
-
14
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
15
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
16
c言語で任意のファイルから読み込んだ単語の数をカウントする
C言語・C++・C#
-
17
CString から LPCTSTRの型に変換
C言語・C++・C#
-
18
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
19
C言語での引数の省略方法
C言語・C++・C#
-
20
変数名の付け方
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsで2行目から文字化け
-
C言語 ; で区切った文字を別...
-
fprintfで出力するファイルのパ...
-
バイナリファイルをテキストフ...
-
fscanfについて
-
ファイル内のデータを1行削除...
-
0x00をファイル出力
-
C/C++ ファイル入出力操作 (長...
-
自民党が「高齢者の医療費負担...
-
C言語初心者の質問失礼します。
-
どんなプログラムを書いても指...
-
バッファとは何ですか
-
営業秘密の漏洩について
-
eclipseで作成したプログラムの...
-
Access クエリ実行が急に非常に...
-
VC++2010でmecabを使いたい
-
VBAで他のプログラムが起動して...
-
コマンド(例えばls)の出力結果...
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルの行数を取得...
-
ファイル内のデータを1行削除...
-
バイナリファイルをテキストフ...
-
fgetsで2行目から文字化け
-
c言語 2つのファイルを行ご...
-
ファイル読み込みについて
-
巨大なテキストファイル(可変...
-
改行までの一文字ずつのファイ...
-
0x00をファイル出力
-
複数テキストファイルを読み込...
-
EOF判定されない
-
【VB.Net】バイト型配列に読み...
-
変数内の文字列を空にできない
-
[動的配列]C言語の勉強で簡単な...
-
続・EOF判定されない
-
0バイトファイルの作成
-
ファイルサイズ指定し、ファイ...
-
winsock recvでの文字化け
-
int型の値をファイルに保存
-
UNIXシェルプログラム等からバ...
おすすめ情報