C++
の合計ファイル行数を取得するために使用できる関数はありますか、それともfor
ループによって手動で実行する必要がありますか?
#include <iostream>
#include <ifstream>
ifstream aFile ("text.txt");
if (aFile.good()) {
//how do i get total file line number?
}
text.txt
line1
line2
line3
そのような機能はありません。カウントは行全体を読み取ることで実行できます
std::ifstream f("text.txt");
std::string line;
long i;
for (i = 0; std::getline(f, line); ++i)
;
スコープについての注意、変数i
は、ループの後でアクセスする場合、 for
の外側にある必要があります。
文字ごとに読み、改行をチェックすることもできます
std::ifstream f("text.txt");
char c;
long i = 0;
while (f.get(c))
if (c == '\n')
++i;
私はこのようにします:
ifstream aFile ("text.txt");
std::size_t lines_count =0;
std::string line;
while (std::getline(aFile , line))
++lines_count;
または単に、
#include<algorithm>
#include<iterator>
//...
lines_count=std::count(std::istreambuf_iterator<char>(aFile),
std::istreambuf_iterator<char>(), '\n');
私はあなたが自分でそれをこのように書く必要があると恐れています:
int number_of_lines = 0;
std::string line;
while (std::getline(myfile, line))
++number_of_lines;
std::cout << "Number of lines in text file: " << number_of_lines;
ゼロに初期化されたカウンターを用意します。カウンターを増やしながら、行を1つずつ読み取ります(行の実際の内容は重要ではなく、破棄できます)。完了し、エラーがなかった場合、カウンターは行数です。
または、すべてのファイルをメモリに読み込み、テキスト「データ」の大きなブロブの改行を数えることができます。
P0Wのようなソリューションよりも高速な方法では、100mbあたり3〜4秒節約できます。
std::ifstream myfile("example.txt");
// new lines will be skipped unless we stop it from happening:
myfile.unsetf(std::ios_base::skipws);
// count the newlines with an algorithm specialized for counting:
unsigned line_count = std::count(
std::istream_iterator<char>(myfile),
std::istream_iterator<char>(),
'\n');
std::cout << "Lines: " << line_count << "\n";
return 0;