Comment compter les lignes d'un fichier en C++?

Comment puis-je compter les lignes en utilisant les classes standard, fstream et ifstream?

24
demandé sur Tshepang 2010-06-19 00:19:59
la source

7 ответов

Que Diriez-vous de ceci: -

  std::ifstream inFile("file"); 
  std::count(std::istreambuf_iterator<char>(inFile), 
             std::istreambuf_iterator<char>(), '\n');
89
répondu Abhay 2010-06-19 00:26:55
la source

Vous lire le fichier ligne par ligne. Compter le nombre de lignes que vous lisez.

11
répondu Martin York 2010-06-19 00:21:24
la source

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;
9
répondu Billy ONeal 2013-04-09 01:25:01
la source

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.

0
répondu 小文件 2016-06-08 10:53:17
la source
int aNumOfLines = 0;
ifstream aInputFile(iFileName); 

string aLineStr;
while (getline(aInputFile, aLineStr))
{
    if (!aLineStr.empty())
        aNumOfLines++;
}

return aNumOfLines;
-1
répondu Maria 2015-07-14 17:34:12
la source

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.

Voir: http://www.cplusplus.com/reference/string/getline/

-2
répondu Craig Wright 2010-06-19 00:41:13
la source

Diviser la taille du fichier par le nombre moyen de caractères par ligne!

-10
répondu John 2010-06-19 01:54:14
la source

Autres questions sur