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

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

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

Поиск и замена строк в бинарном файле - C++

24.06.2014, 23:37. Просмотров 653. Ответов 0
Метки нет (Все метки)

Помогите написать программу. Строки я пометил маркером MARK_BEGIN<строка>MARK_END. Нужно найти и заменить в бинарном файле все строки, соответствующие шаблону.

Научился искать строки в файле, но как теперь заменить fullMatch на stringMath и вставить обратно в файл? Остаток строки нужно забить нулями.

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
#include "stdafx.h"
 
#include <iostream>
#include <fstream>
#include <string>
#include <regex>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    std::ifstream ifs(argv[1], ios::binary);
    std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
 
    std::smatch matches;
    std::regex rgx ("(MARK_BEGIN)(.*?)(MARK_END)");
 
    while (std::regex_search (str,matches,rgx)) {
        std::string fullMatch = matches[0].str(); 
        std::string stringMatch = matches[2].str();
        printf("Found match: %s\n", stringMatch.c_str());
        str = matches.suffix().str();
    }
 
    return 0;
}
Добавлено через 11 часов 3 минуты
Отвечу себе сам. Нужно заменить ofstream на fstream, открыть файл на чтение-запись и в цикле по найденным строкам определять позицию полного совпадения, писать туда целевую строчку и добивать ее нулями через string.append

Итого получилась такая вот штука:
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
30
31
#include "stdafx.h"
 
#include <iostream>
#include <fstream>
#include <string>
#include <regex>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    std::fstream ifs(argv[1], ios::binary|ios::out|ios::in);
    std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
 
    std::smatch matches;
    std::regex rgx ("(START_MARK)(.*?)(END_MARK)");
 
    while (std::regex_search (str,matches,rgx)) {
        printf("Found match: %s at position: %d... ", matches[2].str().c_str(), matches.position(2));
        std::string fullMatch = matches[0].str(); 
        std::string stringMatch = matches[2].str();
        size_t appendSize = fullMatch.size() - stringMatch.size(); 
        stringMatch.append(appendSize, '\0');
        ifs.seekp(matches.position(0));
        ifs.write(stringMatch.c_str(), stringMatch.size());
        printf("replaced\n");
        str = matches.suffix().str();
    }
    ifs.close();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2014, 23:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск и замена строк в бинарном файле (C++):

Замена определенных строк в бинарном файле - C++
Все задание: &quot;Написать функцию, которая динамически выделяет память под массив структур (не меньше шести элементов), заполняет его данными...

Замена элементов в бинарном файле - C++
В бинарном файле с целыми числами заменить элемент с максимальным значением на сумму двух предыдущих. А с минимальным - на сумму след....

Поиск в бинарном файле - C++
мне надо в бинарном файле найти одну 8-ми байтную строку, я сделал вот такой поиск, но он почему то не работает :( std::fstream stream; ...

Поиск в бинарном файле - C++
в бинарном файле записаны цены вводится цена программа должна выдать все услуги равные цене не пойму почему он выдаёт cout &lt;&lt; &quot;Error!...

Поиск по структуре в бинарном файле - C++
Всем привет! Хотел бы обратиться к более опытным людям.Есть задача &quot;Запись имеет вид: название инструмента, число, месяц и год...

Бинарный поиск в бинарном файле - C++
Здравствуйте, помогите решить проблему. Написал программу для нахождения числа бинарным поиском и перебором в бинарном файле. Программа,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2014, 23:37
Привет! Вот еще темы с ответами:

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

Поиск числа в файле, открытым в бинарном режиме - C++
Здравствуйте уважаемые дамы и господа, возник вопрос по поводу поиска числа в бинарном файле. Допустим имеется код: #include...

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

Замена строк в файле - C++
Здравствуйте, у меня есть файл с текстом. Как мне сделать замену одной строки на другую без копирования всего файла? Немного дополню, мне...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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