逐行读取数据文件不自然

Unnatural to read in data files line by line

本文关键字:不自然 文件 数据 读取 逐行      更新时间:2023-10-16

文件流允许我们遍历文件的行。当我们拆分行时,例如用逗号或空格,通常的事情是将此生成的向量添加到另一个容器中。

结果可能是Vector< Vector<String> >(或您的容器风格)。

当我使用 QAbstractTableModel 将其提供给QTableView时,行和列是倒置的:外部容器实际上表示行,而内部容器表示列。

我不确定该怎么做,因为我想呈现数据,允许一些编辑操作(编辑模型),然后将其写出到可比较的文件中。

我的数据将是大约 200,000 行(人)乘以 300 列(值),实际上从文件中读取向量的速度较慢,但当我以倒置方式读取矩阵时,以QTableView呈现速度更快。当将其写入另一个文件时,与通常的方式相比,这次写出转置向量并不容易,您可以:

for (int iter = 0; ....; ...)
{
    row = matrix[iter].join(" ")
    file.write(row)
}

我错过了一些明显的东西吗?它必须以倒置的方式显示。将模型连接到视图时,我应该转置,还是应该以倒置的方式填充原始矩阵?

您可能需要重新检查数据结构。从缓存一致性的角度来看,更好的方法可能是具有以下内容:

struct Line {
    QString str;
    QVector<short> splitPoints; // 2 points per each substring (begin, length)
};
struct File {
    QVector<Line> lines;
}

当然,您希望对Line进行全面的实现,包括便利运算符等,但这给了您一个想法。当从Line返回常量字符串时,您需要使用QStringRef以避免复制内容。