Как извлечь и удалить некоторый текст в файле и удалить его в C ++ - PullRequest
0 голосов
/ 18 мая 2019

Я ищу удаление какой-либо строки текста в файле, созданном на C ++. Фактически, я получил файл на своем сервере, созданный с помощью библиотеки Microsoft C ++ Rest SDK aka Casablanca.

Я извлек свой контентный запрос и вставил его в файл. Вот пример того, что я получил сейчас в моем файле:

"--------------------------"

---------------------------- 379412310113082987734398 Content-Disposition: форма-данные; Name = "файл"; имя файла = "2.png" Тип контента: изображение / png

‰ PNG

IHDR Å} \ Mï sRGB ®Îé gAMA ± üa pHYs Ã Ç Ç ¨ 0dATx ^ ÁÁKG ‡} ÌÑ @ rÌÿ Ó Œ <—qbaã ’’ L & AA‘uPŒû0F Âm + ³³ ((dÇ… <code>fa6Q´ŠÀ‹‚«%b&ƒµ,{˜›î›öU½êîêîšQ÷¸4VÏü¾ƒ]SÕ]ÕÝRªêê©wî € àS °| v€O Àð) Ø> ;À§ ø ì Ÿ € àS ° |

BLABLABLA остальное содержимое моего файла ....

---------------------------- 379412310113082987734398 -

Я хотел бы удалить следующие строки: ---------------------------- 379412310113082987734398 Content-Disposition: форма-данные; Name = "файл"; имя файла = "2.png" Тип контента: изображение / PNG (с пробелом здесь) ---------------------------- 379412310113082987734398 -

Я хотел бы знать, как удалить это для создания моего двоичного файла. Заранее благодарим за вашу драгоценную помощь.

--------------------------- "

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Вы можете прочитать свой файл и написать новый файл, исключая ненужную строку.

Для этого вы можете выполнить итерации файла и проверить каждую строку с помощью регулярного выражения.

Регулярное выражение позволяет вам указать форму, которую должен иметь ваш ввод.

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

http://www.cplusplus.com/reference/regex/

Bye


Я положил сюда маленький код:

#include <stdio.h>
#include <iostream>
#include <regex>
#include <string>

using namespace std;
int main()
{
    string inputLine="----------------------------379412310113082987734398 Content-Disposition: form-data; name=\"file\"; filename=\"2.png\" Content-Type: image/png ";
    regex regularExpression("[-]+[0-9]+ Content-Disposition: form-data; name=\".+\"; filename=\".+\" Content-Type: .+ ");

    if(regex_match(inputLine,regularExpression))
        cout<<"REGEX OK"<<endl;
    else
        cout<<"REGEX FAIL"<<endl;
}

inputLine - это ваша строка. Регулярное выражение - это способ указать формат вашего ввода.

это

"[-]+[0-9]+ Content-Disposition: form-data; name=\".+\"; filename=\".+\" Content-Type: .+ "

означает, что ваш ввод состоит из:

  • 1 или более "-" каракры [-] +
  • 1 или более чисел [0-9] +
  • фиксированная строка << Content-Disposition: форма-данные; имя = \ "+ \."; filename = \ ". + \" Content-Type:. + >>, в котором содержимое name = "" и filename = \ ". + \" может быть любым, а Content-Type может быть любым. Обратите внимание на пробелы в начале и конце строки.

Обратите внимание, что я предположил, что переменные части:

  • число "-"
  • количество цифр
  • имя
  • имя файла
  • Content-Type

если формат ввода отличается, вам нужно изменить регулярное выражение.

0 голосов
/ 18 мая 2019

Откройте файл в двоичном режиме, прочитайте строки из файла и запишите их одну за другой в файл, пока не дойдете до строки, начинающейся с "---------------------------- 379412310113082987734398 "(используйте strncmp () для проверки этого условия).

Затем отбросьте эту строку, не записывая ее.Затем продолжайте читать (и отбрасывать) строки, пока не доберетесь до строки, которая снова соответствует "---------------------------- 379412310113082987734398".

Затем прочитайте и запишите остальные строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...