在文本文件中搜索字符串 [关闭]
Posted
技术标签:
【中文标题】在文本文件中搜索字符串 [关闭]【英文标题】:search string in textfile [closed] 【发布时间】:2015-06-16 09:36:52 【问题描述】:假设你有一个这样的文本文件
你想要的只是“size value”
但是以不同的值重复超过一千次
"field_pic_flag : 0
bottom_field_flag : 0
idr_pic_id : 0
Found NAL at offset ,size 28813 !! Found NAL"
"field_pic_flag : 0
bottom_field_flag : 0
idr_pic_id : 0
Found NAL at offset ,size 210 !! Found NAL"
结果 我只是想要一个代码来编写一个具有这种格式的文本文件,如下所示
size 28813
size 210
and so on
【问题讨论】:
你一定要使用 C/C++ 吗?某种grep
/ awk
/ perl
脚本看起来更适合这项工作......
因为,真的,grep "size [0-9]*" -o yourfile.txt > result.txt
...
感谢您的快速回复,我只需要结果的前 50 个...
【参考方案1】:
如果不强制使用 C/C++,那么grep
可能是你的朋友:
grep "size [0-9]*" -o yourfile.txt > all_sizes.txt
如果你只需要前 50 个结果,head
是:
head -n 50 all_sizes > result.txt
(现在,假设您使用的是某种 Unix 或 OS X ...)
【讨论】:
说文件中的值应该乘以 8 只是为了将字节转换为咬合。怎么做 那是另一个问题。在所有情况下,您都将进行字符串操作,因此任何脚本语言(python、ruby 等)都比 C/C++ 更适合该任务。除非是为了作业,在这种情况下,您应该相应地标记您的问题;)...【参考方案2】:我看到问题被标记为 C/C++。如果您被允许使用 C++ 11,那么您可以轻松使用新引入的正则表达式库。
在下面的代码中,数据直接存储在字符串中,但您可以轻松地从文件中读取它。结果保存在result.txt文件中,同时显示在屏幕上。
#include <iostream>
#include <string>
#include <regex> // The new library introduced in C++ 11
#include <fstream>
int main()
const int n = 50;
int i = 0;
std::ofstream outputFile;
outputFile.open("result.txt");
// You can read this string from your input file
std::string s("\"field_pic_flag : 0\
bottom_field_flag : 0\
idr_pic_id : 0\
Found NAL at offset, size 28813 !!Found NAL\"\
\"field_pic_flag : 0\
bottom_field_flag : 0\
idr_pic_id : 0\
Found NAL at offset, size 210 !!Found NAL\"");
std::smatch m;
std::regex e("size [0-9]*");
while (std::regex_search(s, m, e) && i++<n)
for (auto x : m)
std::cout << x << " ";
outputFile << x << " ";
std::cout << std::endl;
outputFile << std::endl;
s = m.suffix().str();
outputFile.close();
return 0;
经典的解决方案需要更多的努力。
【讨论】:
以上是关于在文本文件中搜索字符串 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章