QTextStream读取字符串直到制表符

3
我有一些文件名中间有空格,但是用制表符分隔开的。我该如何使用 QTextStream 逐个读取它们?
通常的方法会将它们按制表符和空格(实际上是任何 QChar::isSpace())分割,这不是我想要的:
QString s = "file 1.txt\tfile 2.txt";
QTextStream st(&s);
st >> s1 >> s2; // <--- This won't work, it'll give me "file" and "1.txt"

目前我正在使用QString::split()作为解决方法,而不是QTextStream,但我更愿意使用QTextStream


1
将每个'\t'替换为'\n',然后使用st.readLine()如何? - pwwpche
3个回答

3
如果您真的想以流的方式进行操作,另一种选择是创建自定义的TextStream并覆盖>>运算符。
#include <QString>
#include <QStringBuilder>
#include <QTextStream>

class MyTextStream : public QTextStream {
public:
  MyTextStream(QString* str) : QTextStream(str) {}

  MyTextStream& operator>>(QString & str) {
    QChar ch;
    while (!atEnd()) {
      QTextStream::operator >>(ch);
      if (ch == '\t') {
        break;
      }
      str = str % ch;
    }
    return *this;
  }
};

int main() {
  QString s1, s2;
  QString s = "file 1.txt\tfile 2.txt";
  MyTextStream st(&s);
  st >> s1 >> s2; // <--- s1 becomes "file 1.txt" and s2 becomes "file 2.txt"
}

1
无法使用QTextStream实现您想要的功能。请阅读以下链接:

http://qt-project.org/doc/qt-4.8/qtextstream.html

使用QTextStream读取文本文件有三种常见方法:

Chunk by chunk, by calling readLine() or readAll().
Word by word. QTextStream supports streaming into QStrings, QByteArrays and char* buffers. Words are delimited by space, and leading white space is automatically skipped.
Character by character, by streaming into QChar or char types. This method is often used for convenient input handling when parsing files, independent of character encoding and end-of-line semantics. To skip white space, call skipWhiteSpace().

建议:如果您正在生成文件,请不要在文件名之间使用空格。请使用下划线。

0

您可以从Qt文档中了解有关QTextStream流运算符的信息:

QTextStream & QTextStream::​operator>>(QString & str)

从流中读取一个单词并将其存储在str中,然后返回对该流的引用。单词由空格分隔(即,所有QChar :: isSpace()返回true的字符)。

因此,此运算符从由空格分隔的流中读取单词。在这种情况下,没有更改分隔符的方法。因此,最好使用QString :: split()方法或更改文件名以不包含空格(如果可能),并通过空格分隔文件名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接