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

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

Войти
Регистрация
Восстановить пароль
 
Afftarius
0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 4
#1

Обрезка заданной строки в файле с обеих сторон - C++

10.08.2014, 18:49. Просмотров 544. Ответов 5
Метки нет (Все метки)

Добрый день. Нужно обрезать текстовый файл, при этом известен текст слева и справа от нужного, но не сам нужный.
C++
1
2
3
4
5
6
7
string input;
string start = "<div data-lobc=\"0\" id=\"", finish = "\" class=\"pm_thread new";
ifstream f("file.txt");
getline(f, input); // Читаем весь файл целиком
input.erase(0, input.find(start) + start.length()); // Стираем все от начала до начального слова + само начальное слово
input.erase(input.find(finish) - 1, input.length()); //стираем все после конечного слова с конечным словом
f.close();
При выполнении предпоследней строчки валится с "Необработанное исключение в "0x764042eb" в "ip.exe": Исключение Microsoft C++: std::out_of_range по адресу 0x0028f4a8.."
Файл весит 18 килобайт, если его усечь до одной строчки, ошибок нет.
visual studio 2008
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2014, 18:49     Обрезка заданной строки в файле с обеих сторон
Посмотрите здесь:

Вывести дек с обеих сторон - C++
Нужно сделать так что бы дек заполняло с обеих сторон #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;deque&gt; using namespace std;...

Если в обеих векторах есть элементы, кратные 4, то сформировать вектор С из положительных элементов обеих векторов - C++
Помогите пожалуйста с программой на С. ((( Даны вектор А и B. Если в обеих векторах есть элементы, кратные 4, то сформировать вектор С...

Обрезка строки - C++
Добрый день! Есть такая конструкци: char buff; sprintf(buff,&quot;Hello\x00%s!&quot;,&quot;World&quot;); std::cout &lt;&lt; buff &lt;&lt; std::endl; // Hello ...

Строки, динамическая память, обрезка строк - C++
Доброго времени суток... Вот задача на дом 2. Показать на экран с m по n символов строки, введенной пользователем и записать данный...

Даны две строки. Составить третью строку из слов, имеющихся в обеих данных строках - C++
Здравствуйте! Нуждаюсь в помощи. Есть следующее задание: даны две строки. Составить третью строку из слов, имеющихся в обеих данных...

Заменить значения всех элементов заданной строки матрицы числами заданной последовательности - C++
Дан двумерный массив (MxN). Составить программу, которая заменяет значения всех элементов некоторой строки массива числами заданной...

Из первой заданной строки удаляется каждый символ, принадлежащий второй заданной строке - C++
Составить процедуру, в результате обращения к которой из первой заданной строки удаляется каждый символ, принадлежащий второй заданной...

Поиск в файле заданной буквы - C++
здраствуйте дорогие форумчане помогите пожалуйста с заданием. в файле есть готовый текст, надо с помощью алгоритма линейного поиска найти...

Указать номер строки, максимально удаленной от первой строки заданной матрицы - C++
Задание: Расстояние между k-й и 1-й строками квадратной матрицы А опеределяется как r = сумма от j=1 до N от (abs(akj)*abs(a1j)). Указать...

Поиск в файле заданной последовательности символов - C++
Друзья, помогите плиз!!! Нужно написать программу поиска в файле заданной последовательности символов не превышающей по длине 10 знаков....

В заданной квадратной матрице вывести индекс строки, полностью повторяющей все элементы первой строки - C++
Буду очень благодарен, если кто поможет в решении задачи: В массиве размерностью NxN вывести индекс строки, которая полностью повторяет...

Поиск заданной последовательности символов в бинарном файле - C++
Допустим в файле написано &quot;raz dva tri dva raz raz dva&quot;. Нужно произвести поиск и подсчёт введёной пользователем последовательности...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1643 / 1271 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
10.08.2014, 19:06     Обрезка заданной строки в файле с обеих сторон #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ты читаешь только одну строку из файла. Целиком например так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <string>
 
int main()
{
    std::ifstream ifs("in.txt");
    if(ifs.is_open())
    {
        std::string str;
        for(char c; ifs.get(c); str += c)
            ;
        std::cout << str << '\n';
    }
    else
        std::cerr << "Unable to open input file\n";
    return 0;
}
Afftarius
0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 4
12.08.2014, 06:10  [ТС]     Обрезка заданной строки в файле с обеих сторон #3
Спасибо, все работает

Добавлено через 19 часов 7 минут
но теперь еще такой вопрос... стоит setlocale(0, ""); если вывести русский текст через cout, то он отображается нормально. Но если его читать из файла (UTF-8), получаются кракозябры
пробовал пересохранять в ANSI, но fstream меняет на UTF-8 сам
есть решение для этого?
скрин во вложениях
Миниатюры
Обрезка заданной строки в файле с обеих сторон  
Afftarius
0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 4
12.08.2014, 06:18  [ТС]     Обрезка заданной строки в файле с обеих сторон #4
читаю вот таким:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ifstream hist("history.txt");
                    string line;
                    ofstream output("messages_only.txt");
 
                    while (getline(hist, line))
                    {
                        size_t pos = line.find("<div class=\"msg_body\">");
                        if (pos != string::npos)
                        {
                            line.erase(0, 34);
                            line.erase(line.length()  - 6);
                            output << nick << br;
                            output << line;
                            output << br;
                            cout << endl << line << endl << endl;
                        }
                        else 
                        {
                            line = "";
                            output << line;
                        }
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
12.08.2014, 09:35     Обрезка заданной строки в файле с обеих сторон #5
Afftarius, можете вместо erase'ов воспользоваться выделением субстроки. По крайней мере это избавит вас от переносов символов:
C++
1
2
input = input.substr(input.find(start) + start.length(),                           //Начало субстроки
                     input.find(finish) - input.find(start) + start.length()); //Количество элементов в субстроке
Ах да с диапазонами мог напутать. Проверьте.
Afftarius
0 / 0 / 0
Регистрация: 10.08.2014
Сообщений: 4
12.08.2014, 09:58  [ТС]     Обрезка заданной строки в файле с обеих сторон #6
Ilot, спасибо, мне бы теперь разобраться с кодировкой.
Yandex
Объявления
12.08.2014, 09:58     Обрезка заданной строки в файле с обеих сторон
Ответ Создать тему
Опции темы

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