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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
C言語でCSVファイルの行数を読み取りたい
C言語・C++・C#
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
コマンド(例えばls)の出力結果を文字列で取得するプログラムの作成方法
C言語・C++・C#
-
-
4
ファイルから読み取った改行文字を消す方法
C言語・C++・C#
-
5
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
C言語・C++・C#
-
6
”行数のカウント”はどうすればいいのでしょうか?
C言語・C++・C#
-
7
char str[256]の256の意味は?
C言語・C++・C#
-
8
ファイル名である文字列からbasenameを取得したい
C言語・C++・C#
-
9
fopne で失敗する原因
C言語・C++・C#
-
10
C言語のポインターに関する警告
C言語・C++・C#
-
11
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
-
12
c言語でのfscanfについて
C言語・C++・C#
-
13
switch の範囲指定
C言語・C++・C#
-
14
CString から LPCTSTRの型に変換
C言語・C++・C#
-
15
エディットの文字サイズ変更
C言語・C++・C#
-
16
テキストボックスからフォーカス外す
C言語・C++・C#
-
17
char*を初期化したいのですが
C言語・C++・C#
-
18
C言語 exitの使い方
C言語・C++・C#
-
19
charからLPTSTRへの変換方法
C言語・C++・C#
-
20
Excel 16進数
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バイナリファイルをテキストフ...
-
fgetsで2行目から文字化け
-
改行までの一文字ずつのファイ...
-
ファイル内のデータを1行削除...
-
ハフマン符号のプログラム
-
C言語 バイナリファイルの読み...
-
VS2010 MFC CStdioFileについて
-
ファイルオープンの関数につい...
-
【VB.Net】バイト型配列に読み...
-
freadとfwrite
-
テキストファイルの行数を取得...
-
EOF判定されない
-
winsock recvでの文字化け
-
fseekの使い方
-
VBSで指定行に挿入
-
fopen(書き込みモード)でファイ...
-
どんなプログラムを書いても指...
-
C言語初心者の質問失礼します。
-
バッファとは何ですか
-
FTPでputすると空ファイルが出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
バイナリファイルをテキストフ...
-
VBSで指定行に挿入
-
fgetsで2行目から文字化け
-
テキストファイルの行数を取得...
-
ファイルサイズ指定し、ファイ...
-
巨大なテキストファイル(可変...
-
【VB.Net】バイト型配列に読み...
-
fopenで開いたファイルのサイズ...
-
改行までの一文字ずつのファイ...
-
freadとfwrite
-
c言語 2つのファイルを行ご...
-
0バイトファイルの作成
-
fopen(書き込みモード)でファイ...
-
テキストファイルの先頭への文...
-
テキストファイルの文字列の削除
-
C言語での採番について
-
VS2010 MFC CStdioFileについて
-
続・EOF判定されない
-
C言語での改行コードの扱いにつ...
おすすめ情報