web-dev-qa-db-ja.com

C ++では、テキストファイルの特定の行に移動する方法はありますか?

Fstreamを使用してテキストファイルを開くと、8行目などの特定の行にジャンプする簡単な方法はありますか?

21
Jim

そこでループします。

#include <fstream>
#include <limits>

std::fstream& GotoLine(std::fstream& file, unsigned int num){
    file.seekg(std::ios::beg);
    for(int i=0; i < num - 1; ++i){
        file.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    }
    return file;
}

fileのシークポインターを行numの先頭に設定します。

次の内容のファイルをテストします。

1
2
3
4
5
6
7
8
9
10

テストプログラム:

int main(){
    using namespace std;
    fstream file("bla.txt");

    GotoLine(file, 8);

    string line8;
    file >> line8;

    cout << line8;
    cin.get();
    return 0;
}

出力:8

36
Xeo

すべての行の長さが同じ場合、istream :: seekg ()を使用してその場所にジャンプし、そこから読み取ることができます。

6

以下は、行が同じ長さである場合のstd::getline()を使用した適切な例です。

#include <iostream>
#include <fstream>
#include <string>

const int LINE = 4;

int main() {
std::ifstream f("FILE.txt");
std::string s;

for (int i = 1; i <= LINE; i++)
        std::getline(f, s);

std::cout << s;
return 0;
}
3
Teodor Ciuraru

一般に、noXeoが示す に似た戦略を使用して歩いていく必要があります。

netrom says のように、行の長さが固定されていることがわかっている場合、yes

また、行の長さが事前にわからない場合でも、(1)たくさん飛び回ることができます。(2)その間、誰もあなたのファイルをいじらないことを保証できます。を渡してインデックスを作成し、その後それを使用します。

0
dmckee