Comment compter les lignes d'un fichier en C++?
Comment puis-je compter les lignes en utilisant les classes standard, fstream
et ifstream
?
7 réponses
Que Diriez-vous de ceci: -
std::ifstream inFile("file");
std::count(std::istreambuf_iterator<char>(inFile),
std::istreambuf_iterator<char>(), '\n');
Vous lire le fichier ligne par ligne. Compter le nombre de lignes que vous lisez.
C'est la version correcte de Craig W. Wright réponse:
int numLines = 0;
ifstream in("file.txt");
std::string unused;
while ( std::getline(in, unused) )
++numLines;
méthodes du noyau suivant @Abhay
Un code complet que j'ai fait :
size_t count_line(istream &is)
{
// skip when bad
if( is.bad() ) return 0;
// save state
std::istream::iostate state_backup = is.rdstate();
// clear state
is.clear();
std::istream::streampos pos_backup = is.tellg();
is.seekg(0);
size_t line_cnt;
size_t lf_cnt = std::count(std::istreambuf_iterator<char>(is), std::istreambuf_iterator<char>(), '\n');
line_cnt = lf_cnt;
// if the file is not end with '\n' , then line_cnt should plus 1
is.unget();
if( is.get() != '\n' ) { ++line_cnt ; }
// recover state
is.clear() ; // previous reading may set eofbit
is.seekg(pos_backup);
is.setstate(state_backup);
return line_cnt;
}
il ne changera pas l'état du flux de fichier origin et y compris le traitement de la situation '\n'-miss pour la dernière ligne.
int aNumOfLines = 0;
ifstream aInputFile(iFileName);
string aLineStr;
while (getline(aInputFile, aLineStr))
{
if (!aLineStr.empty())
aNumOfLines++;
}
return aNumOfLines;
int numLines = 0;
ifstream in("file.txt");
//while ( ! in.eof() )
while ( in.good() )
{
std::string line;
std::getline(in, line);
++numLines;
}
Il y a une question de comment vous traitez la toute dernière ligne du fichier si elle ne se termine pas par une nouvelle ligne. En fonction de ce que vous faites, vous pourriez vouloir les compter et vous ne pourriez pas. Ce code le compte.
Diviser la taille du fichier par le nombre moyen de caractères par ligne!