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