web-dev-qa-db-ja.com

C ++でファイルの行を数える方法は?

標準クラスfstreamおよびifstreamを使用して行をカウントするにはどうすればよいですか?

23
malhobayyeb

これはどう :-

  std::ifstream inFile("file"); 
  std::count(std::istreambuf_iterator<char>(inFile), 
             std::istreambuf_iterator<char>(), '\n');
94
Abhay

ファイルを1行ずつ読み取ります。読んだ行の数を数えます。

12
Martin York

これは、Craig W. Wrightの答えの正しいバージョンです。

int numLines = 0;
ifstream in("file.txt");
std::string unused;
while ( std::getline(in, unused) )
   ++numLines;
10
Billy ONeal

@Abhayに続くカーネルメソッド

私がやった完全なコード:

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;
}

originファイルストリームの状態は変更されず、最後の行の '\ n'-missシチュエーション処理も含まれません。

0
小文件