Читать только данную строку из текстового файла? - PullRequest
1 голос
/ 13 февраля 2012

Есть ли в C ++ способ получить случайное число до заданного размера, а затем прочитать эту строку из текстового файла? Без необходимости проходить все линии? У меня есть это, которое просто печатает строку за строкой:

#include <cstdio>
#include<iostream>
#include<fstream>

using namespace std;
int main(int argc, char* argv[]){
    ifstream myReadFile;
    myReadFile.open("words.txt");
    char output[100];
    if (myReadFile.is_open()) {
        while (!myReadFile.eof()) {
            printf("\n");
            myReadFile >> output;
            cout<<output;
        }
    }
    myReadFile.close();
    return 0;
}

Ответы [ 5 ]

9 голосов
/ 13 февраля 2012

Нет способа сделать это, если вы не знаете размер каждой строки каким-либо другим способом.Затем вы можете сложить размеры строк, которые вы хотите пропустить, и сделать seekg, чтобы перейти к началу строки.

4 голосов
/ 13 февраля 2012

Как правило, нет: строки разделены специальным символом, ваша программа должна будет прочитать все символы и посчитать разрывы строк, чтобы сделать то, что вам нужно.

В особых случаях, когда все ваши строки имеют одинаковую длину (что случается чаще на соревнованиях по программированию, чем на практике), вы можете переместить указатель чтения файла в определенное место и прочитать вашу строку оттуда.

P.S. Единственное место, где я видел это на практике, это файлы UUENCODEd.

2 голосов
/ 13 февраля 2012

Без необходимости проходить все строки?

AFAIK, №

1 голос
/ 13 февраля 2012

Есть seekg, которые вы можете использовать для перехода к определенному адресу в файле.Но если вы не можете гарантировать, что длина каждой строки определена, вы не можете быть уверены, что ваше случайное смещение действительно начинается с новой строки.

Кстати, данный код в вопросе фактически читает одно словоза раз, а не по одной строке за раз.Чтобы прочитать всю строку сразу, используйте std::getline.

1 голос
/ 13 февраля 2012

Чтобы прочитать строку в файле, вы должны понимать, что строка ограничена символом '\ n'. следовательно, вам придется прочитать весь файл, несмотря ни на что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...