Форум программистов, компьютерный форум CyberForum.ru

Перемещение по текстовому файлу. - C++

Восстановить пароль Регистрация
 
Denisfox
Сообщений: n/a
13.03.2012, 17:33     Перемещение по текстовому файлу. #1
Задача стоит такая:
Есть текстовый файл, где разные части текста отделены каким-либо спецсимволом (можно нумерованным, или не нумерованным - не важно). При этом разделительные символы встречаться в тексте не должны.

Нужно, чтобы программа могла прочесть этот файл, и вывести на экран нужную часть текста.


Допустим есть текстовый файл со следующим содержанием:

%1
Текст 1.
%2
Текст 2.
%3
Текст 3.
В программу вводится число. Допустим программа получила число 2 - на экран выводится "Текст 2.", думаю принцип понятен.


Если можно подскажите именно сам алгоритм поиска по текстовому файлу, и то, как можно "откусить" нужный кусок текста, и вывести на экран консоли.

Заранее огромное спасибо, буду рад любым советам.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2012, 17:33     Перемещение по текстовому файлу.
Посмотрите здесь:

C++ как подключиться к текстовому файлу на с++
Перемещение по бинарному файлу C++
Перемещение по файлу клавишами C++
Файл: Поиск по текстовому файлу C++
путь к файлу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
13.03.2012, 17:56     Перемещение по текстовому файлу. #2
Простейший алгоритм
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    char symbol='%';
    int nPart=2;
    char temp;
    string text;
    ifstream file("file.txt");
 
    while(!file.eof() && nPart)
    {
        file>>temp;
        if(temp==symbol)
         nPart--;
    }
 
    if(!file.eof())
     file>>temp;
 
    while(!file.eof() && temp!=symbol)
    {
        cout<<temp;
        file>>temp;
    }
}
Оптимизацией и проверками занимаемся сами
Denisfox
Сообщений: n/a
14.03.2012, 23:47     Перемещение по текстовому файлу. #3
Хм.. вроде бы алгоритм понял, спасибо..

Не могу одного понять еще - из-за чего в тексте при выводе убираются все пробелы?

Добавлено через 14 минут
upd:
Почему пропадают понял - обработка идет посимвольно, пробелы игнорируются..

Но возникает новый вопрос - как их вернуть?

Собственно как и вопрос о возврате остальных символов форматирования - перенос на новую строку, к примеру.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
14.03.2012, 23:57     Перемещение по текстовому файлу. #4
Цитата Сообщение от Denisfox Посмотреть сообщение
Но возникает новый вопрос - как их вернуть?
Использовать file.get() вместо операции взять из потока.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
15.03.2012, 00:06     Перемещение по текстовому файлу. #5
Denisfox, забыл о том что потоки же отбрасывают пробелы и переводы каретки в этом случае. Нужно добавить манипулятор noskipws в поток, либо можно установить спец. флаг.
C++
1
2
3
4
5
6
........................................................
    while(!file.eof() && temp!=symbol)
    {
        cout<<temp;
        file>>noskipws>>temp;
    }
Либо можно поиграть с флагами, это будет более эффективно (каждый раз манипулятор не надо применять)
C++
1
2
3
4
5
6
7
8
9
10
11
......................................
    ios_base::fmtflags ff;
    ff=file.flags();
    ff &= ~ios_base::skipws;
    file.flags(ff);
 
    while(!file.eof() && temp!=symbol)
    {
        cout<<temp;
        file>>temp;
    }
Миниатюры
Перемещение по текстовому файлу.  
Yandex
Объявления
15.03.2012, 00:06     Перемещение по текстовому файлу.
Ответ Создать тему
Опции темы

Текущее время: 16:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru