2012-02-13 2 views
1

Есть ли способ в 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; 
} 
+0

Это не читается по строкам - оно читается слово за словом. Если вы собираетесь читать строки, вы должны использовать 'std :: string' и' std :: getline' a la: 'std :: string line; std :: getline (myReadFile, строка); ' –

ответ

9

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

+0

Эти средства, скорее всего, будут включать в себя все строки;) – m0skit0

+4

@ m0skit0, если вы делаете много случайных выборок в файл, может быть смысл прочитать его один раз, чтобы получить длину строки. Также вы можете знать длины без чтения, т. Е. Когда каждая строка является фиксированной длиной. –

+0

Правда, я думал, что сразу после публикации моего комментария – m0skit0

2

Без того, чтобы пройти через все линии?

AFAIK, no.

4

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

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

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

1

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

1

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

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

Смежные вопросы