我正在寻找删除用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-
我想知道如何删除它来生成我的二进制文件。 预先感谢您的宝贵帮助。
---------------------------“
答案 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)
以二进制模式打开文件,从infile中读取行并将它们逐行写入outfile,直到到达以“ ----------------”开头的行------------ 379412310113082987734398”(使用strncmp()检查这种情况)。
然后丢弃该行而不编写它。然后继续读取(并丢弃)行,直到到达与“ ---------------------------- 379412310113082987734398”再次匹配的行。 / p>
然后读入并写出剩余的行。