【发布时间】:2021-05-08 15:26:24
【问题描述】:
我有一个从一系列 Python 数组创建的文件。我从ifstream 加载它。
该文件是文本,只包含数组。它的形式是:
[[1 22 333 ... 9
2 2 2 ... 2]
...
[5 6 2 ... 222
5 5 5 ... 240]]
[[2 3 444 ... 9]
...
[5 6 2 ... 222
5 5 5 ... 240]]
[[ etc...
每个数组的每一行都以[ 开头并以] 结尾,但可以在文件中分成几行(即,在打开和关闭[] 中有回车或换行。
整个数组以方括号 [] 开头和结尾。
数字的类型总是整数。对于特定数组的每一行,每行中的条目数(即列数)将相同,但不同数组之间的数字可能不同。数组中的行数是未知的,并且可能因数组而异。而且每个文件的数组总数在打开文件之前也是未知的。
数组可以以任何格式存储。为了这个例子,让我们把它们放在一个向量的向量中,即,
typedef vector<vector<int>> myArray; //Index [row][col]
typedef vector<myArray> myArrays;
我想有效地解析这个(可能非常大的文件,很可能很多文件)。我的老板非常热衷于为此使用std::regex,只要它高效,我就很满意。
所以我的问题是:如何使用正则表达式有效地解析它。是否有一种方法可以在不使用正则表达式的情况下更有效地解析它?
【问题讨论】:
-
std::regex通常是您可以执行此类操作的最慢方式。请从你的脑海中禁止 parsing + regex 的组合。您可以访问 Python 源代码吗?最简单的方法是更改 Python 端的输出,并使用 C++ 很好支持的结构化格式。 -
@dtell - 很公平。这就是我问这个问题的原因。这是我老板的想法,而这正是我想要确定的。无法更改文件或它们从 Python 输出的方式。
-
我不太了解这篇文章的降价率。我怎样才能更好地写出这个问题,或者可以添加哪些细节?