如何提取和删除文件中的某些文本并在C ++中将其删除

时间:2019-05-18 13:00:39

标签: c++ text

我正在寻找删除用C ++生成的文件中的某些文本行。 实际上,我在服务器上收到了一个由Microsoft库C ++ Rest SDK(也称为Casablanca)制成的文件。

我提取了内容请求并将其插入文件中。 这是我现在在文件中得到的一个示例:

“ --------------------------”

---------------------------- 379412310113082987734398 内容处置:表单数据; name =“文件”; filename =“ 2.png” 内容类型:image / png

‰PNG

IHDRÅ} \MïsRGB®γgAMA±üpHYsÃÃÇo¨d0IDATx ^íÁkG‡}ÌÑ@ rÌÿ́ÓŒ<—qbaã‘L&AA’uPŒû0F Âm+³³((dÇ…{{1}}ø쟀àS°|

BLABLABLA我文件的其余内容。...

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

我想删除以下行: ---------------------------- 379412310113082987734398 内容处置:表单数据; name =“文件”; filename =“ 2.png” 内容类型:image / png (这里有空格) ---------------------------- 379412310113082987734398-

我想知道如何删除它来生成我的二进制文件。 预先感谢您的宝贵帮助。

---------------------------“

2 个答案:

答案 0 :(得分:0)

您可以读取文件并写入新文件,但不包括不需要的行。

为此,您可以迭代文件并使用正则表达式检查每一行。

使用正则表达式可以指定输入必须具有的形式。

您应该确定输入的哪一部分是固定的,哪一部分是可变的,以便构建正确的正则表达式。

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

再见


我在这里放了一些代码:

#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可以是任何内容。 注意字符串开头和结尾的空格。

请注意,我以为可变部分是:

  • “-”的数量
  • 位数
  • 名称
  • 文件名
  • 内容类型

如果输入格式不同,则必须修改正则表达式。

答案 1 :(得分:-1)

以二进制模式打开文件,从infile中读取行并将它们逐行写入outfile,直到到达以“ ----------------”开头的行------------ 379412310113082987734398”(使用strncmp()检查这种情况)。

然后丢弃该行而不编写它。然后继续读取(并丢弃)行,直到到达与“ ---------------------------- 379412310113082987734398”再次匹配的行。 / p>

然后读入并写出剩余的行。