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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Denisfox
Сообщений: n/a
#1

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

13.03.2012, 17:33. Просмотров 633. Ответов 4
Метки нет (Все метки)

Задача стоит такая:
Есть текстовый файл, где разные части текста отделены каким-либо спецсимволом (можно нумерованным, или не нумерованным - не важно). При этом разделительные символы встречаться в тексте не должны.

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


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

%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++
C++ Реализовать поиск по текстовому файлу
C++ Путь к файлу
Путь к файлу C++
C++ путь к файлу
Подключение к текстовому файлу C++
Задание пути к текстовому файлу C++
C++ Перемещение указателя FILE* по файлу

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
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
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
14.03.2012, 23:57     Перемещение по текстовому файлу. #4
Цитата Сообщение от Denisfox Посмотреть сообщение
Но возникает новый вопрос - как их вернуть?
Использовать file.get() вместо операции взять из потока.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
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     Перемещение по текстовому файлу.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru