文件 io - 读取 C++ 中已知格式的数据
file io - Read data of known format in c++
我有一个 txt 文件,其中包含用空格分隔的浮点数,如下所示:
3.141600 7.54654
4.021560 7.54654
7.54654 4.021560
9.549844 3.141600
我使用以下代码来读取数据。
int main ()
{
ifstream file("myFile.txt");
float x;
float y;
while(file >> x >> y)
std::cout << x << ' ' << y << std::endl;
system ("pause");
}
这很好.....
现在我得到了一个非常奇怪的文本文件,其中包含一些类似的东西:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\f0\fs20 0.017453293\tab
2.01623406\par
0.087266463\tab 2.056771249\par
0.191986218\tab 2.045176705\par
0.27925268\tab 1.971733548\par
0.366519143\tab 1.844657601\par
0.453785606\tab 1.669694097\par
0.541052068\tab 1.4539812\par
0.628318531\tab 1.205819241\par
0.715584993\tab 0.934405231\par
0.802851456\tab 0.649540807\par
......等等...
我想读取此文件并获取 x(出现在 tab
之前(和 y(出现在 par
之前(值,我该怎么做?请注意,没有空格。众所周知,tab
和par
出现在所有数据行中。
您的"奇怪的文本文件"是RTF格式。您可以尝试自己编写解析器,但使用像 http://sourceforge.net/projects/librtf/这样的库可能会更好。
更好的是,请问谁给你数据,以正确的格式发送。以我的拙见,在 RTF 文件中处理的数据有些荒谬。
您始终可以使用正则表达式,例如:
std::string pattern("(\d+.\d+)\\tab[^\d]+(\d+.\d+)\\par");
std::regex r(pattern);
std::ifstream ifs("input_data.txt");
std::string data;
while(getline(ifs, data))
{
for (std::sregex_iterator it(data.begin(), data.end(), r), end_it; it != end_it; ++it)
{
std::cout << it->str(1) << " " << it->str(2) << std::endl;
}
}
(!如果 X 和 Y 值之间有换行符,则可能需要读取字符串中的文件内容。
编辑:
使用原始字符串文本的模式:
std::string pattern(R"((d+.d+)\tab[^d]+(d+.d+)\par)");
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 如何为QImage检测足够的格式(数据类型)以消耗最少的RAM
- 为什么使用 C++ 中的类对象写入文件中的数据以非文本格式存储?
- 在 c++ libusb 中将数据写入得利捷 PM9500 扫描仪的正确格式
- 如何以正确的格式沿第二个管道发送回数据?
- C++ 将字符串数据包转换为 iphdr语言 - 字符串数据包的格式应该是什么?
- TCP/IP - 以 C/C++ 格式发送十六进制数据包以控制中继板
- 将数据保存在C++中,从 Python 加载 - 推荐的数据格式
- Python API用于解析包含数组格式的protobuf数据的二进制文件
- protobuf与rapidjson数据格式
- 使用访问器以两种格式打印数据
- C :如何从格式的文本文件中读取许多数据到程序中
- 基于向量的数据格式的分割故障误差
- 如何以json格式保存弹性搜索的数据
- qDebug - 如何以位(二进制格式)输出数据
- 表示命令数据包格式的数据结构
- 我如何使用错别字读取格式的数据
- 如何从内存中读取原始图像 (YUV 4:2:2) 格式的图像数据
- strstr无法搜索八进制格式数据中的字符串