我正在使用QTextStream编写一个简单的CSV数据导出,但每行末尾会出现一个冗余的逗号。如何删除QTextStream中最后写入的符号并在删除后继续写入数据?
答案 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;
...
}