有更好的方法来解析一行这样的文本吗?
Is there a better way to parse a line of text like this?
我有一个文本文件,其中文本行有一个字符串,另一个字符串后跟多达4个整数,例:
clear "clear water.png" 5 7
wet "wet water.png" 9 5 33 17
soft "soft rain falling.png"
我唯一的看法是:
读取,直到找到空间
set string to wet
read直到双引号
读到第二个双引号
设置第二个字符串为wet water.png
而不是结束行
read until space
将字符串放入字符串流
将结果整型压入int
的向量
有更好的方法吗?
谢谢
这是scanf
和公司真正的亮点。
char first_string[33], second_string[129];
sscanf(input_string,
"%32s%*[^"]%*c%128[^"]%*c %d %d %d %d",
first_string,
second_string,
&first_int,
&second_int,
&third_int,
&fourth_int);
你可能想在if
语句中这样做,这样你就可以测试返回值,告诉你有多少字段被转换了(例如,这样你就知道你在最后读了多少整数)。
%32s将字符串读取到第一个空格(或32个字符,以先到的为准)。
%*[^"]忽略第一个"
以内的输入。
%*c忽略多一个字节的输入(引号本身)
%128[^"]读取引号中的字符串(即,直到下一个引号字符)。
%*c忽略结束引号%d读取int(我们已经执行了四次)。
每个%d
之前的空格确实是不必要的——它将跳过空白,但是没有空格,%d
将跳过前导空白。我包含它们纯粹是为了使它更易于阅读。
丑陋,没有错误检查,但不依赖于任何非标准库:
string s;
while(getline(fin, s))
{
string word, quoted_string;
vector<int> vec;
istringstream line(s);
line >> word;
line.ignore(numeric_limits<streamsize>::max(), '"');
getline(line, quoted_string, '"');
int n;
while(line >> n) vec.push_back(n);
// do something with word, quoted_string and vec...
}
根据输入字符串的限制,您可以尝试在double-quote
上分割,然后在space
上分割。
是
使用getline
一次读取一行。使用正则表达式库解析行
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何使代码打印文本文件中的第一行?
- 如何在C++中以这种方式返回一行文本?
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 到达分隔符时跳到文本文件的下一行
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中
- 从文本文件中随机选取一行
- 以 LPCTSTR 开头编写另一行文本的最佳方法是什么?
- C++ ->尝试逐字阅读一行文本。如何使指针等效于用于存储输入的当前二维数组
- 如何让控制台在输入一行文本时输出某些内容
- 如何使用预处理器从源文件中获取一行文本
- 用c++将文件中的一行文本复制到字符串中
- 如何在控制台项目中重写一行文本?c++
- 如何从文件中读取一行文本而不跳过空行?
- 使用正则表达式从C++中的一行文本中提取数据
- 如何在不知道一行文本有多少元素的情况下读取每个元素?(c++)
- 在C++中读取一些整数,然后读取一行文本