2014-10-10 1 views
0

У меня есть довольно большой текстовый файл и вы хотите иметь программу на C++, которая просматривает ее и возвращает раздел главы, который я хочу. Например, допустим, что файл называется «MyTales.txt», а содержимое нейC++: Поиск главы книги

MYTALE by Me (classifying what book it is) 
CHAPTER ONE 
Part 1: The Start 

Где Part 1 (в полном объеме) это раздел должен быть возвращен.

В качестве основного шаблона, вот что я думал до сих пор:

#include<iostream> 
#include<fstream> 

ifstream in; 
ofstream out; 

string book, chapter, part; 

int main() { 
cout << "Please enter the part to locate:\nBook: "; 
cin >> book; 
cout << "Chapter: "; 
cin >> chapter; 
cout << "Part: "; 
cin >> part; 

in.open("MyTales.txt"); 
while (in >> data) { 
    // where data is assigned 
} 

out.open("BookParts.txt"); 
out << data; 

in.close(); 
out.close(); 
} 

Я просто не знаю, как назначить «данные» правильно. Я возился с некоторыми строковыми функциями и другими вещами, но ничего не получается. Любая помощь очень ценится!

+1

http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong – Mat

+1

Текстовый файл - это * очень неструктурированный формат файла. Все, что вы знаете, это то, где начинается и заканчивается линия. Точная семантика строки не фиксирована вообще, просто фрагмент символов. Вы должны будете сделать свои собственные правила. Что-то драконовское, как первая строка главы, содержит количество строк в заголовке и тексте главы. XML - драконовский формат. Все идет, если какая-либо программа генерирует текстовый файл, согласуется с вашими правилами. –

+0

Ну, я не говорю, что это не то, что я хочу делать, это просто то, что я имею дело с большим количеством данных, которые, случается, были сохранены в текстовых файлах, поэтому перелистывая все это в другой формат на самом деле это не было бы выбором. – T145

ответ

0

Первой проблемой было бы сгенерировать заголовок главы из ее числового значения. Как только имя будет получено, проигнорируйте входную строку, включая имя главы. Затем прочитайте ввод, пока не встретите строку, начинающуюся с «ГЛАВА» или окончания ввода. Наконец выведите все, что вы прочитали.

+0

Как проигнорировать ввод? Моя первая реализация использовала оператор compact if, чтобы определить указанную строку, затем я использовал оператор 'getline (in, data);'. – T145

+0

«игнорируя» Я имею в виду чтение строки, но не сохранение полученной строки. – Codor

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

  • Нет связанных вопросов^_^