1

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

4

2 回答 2

1

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

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

于 2017-11-06T10:46:32.093 回答
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;
    ...
}
于 2017-11-06T13:18:34.593 回答