不自然地逐行读取数据文件

时间:2013-09-06 18:52:09

标签: c++ database qt qtableview

文件流允许我们迭代文件的行。当我们分割线时,例如通过逗号或空格,通常的做法是将此结果向量添加到另一个容器中。

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

当我使用QTableView将此项提交给QAbstractTableModel时,行和列会反转:外部容器实际上表示行,而内部容器表示列。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

struct File {
    QVector<Line> lines;
}

当然,您需要Line的全面实施,包括便利运营商等,但这会让您有所了解。从Line返回常量字符串时,您希望使用QStringRef来避免复制内容。