如何"写" QTextStream中的退格?

时间:2017-11-06 10:41:18

标签: c++ csv qt5 qtextstream

我正在使用QTextStream编写一个简单的CSV数据导出,但每行末尾会出现一个冗余的逗号。如何删除QTextStream中最后写入的符号并在删除后继续写入数据?

2 个答案:

答案 0 :(得分:1)

简短的回答是你不能,它是一个流(没有一些缓冲区操作,我认为你不想这样做)。没有删除字符这样的东西 - 它已经被发送到“下游”(想想终端)。

您可能希望删除原始文件中的冗余逗号,或者逐行读取CSV并删除逗号,然后再将其写入输出流。您仍然可以使用QTextStream作为输入流逐行读取,但在将其传递给输出流之前,您必须自己删除逗号。

答案 1 :(得分:1)

没有流操作“unwrite”,因此您无法直接删除逗号。 应该做的是确保你不要写它。

struct QStreamJoiner
{
    QTextStream & ts;
    bool doComma = false;
    template<typename T>
    QStreamJoiner & operator<<(const T & value)
    {
        if (doComma++) ts << ',';
        ts << value;
        return *this;
    }
}

您可以在QStreamJoiner周围为每一行使用QTextStream之类的包装,例如

QTextStream out = ...;
for (auto record : records)
{
    QStreamJoiner joiner(out);
    joiner << record.field1;
    if (condition) joiner << record.field2;
    ...
}