【问题标题】:How to read in a file word by word in QT?如何在 QT 中逐字读取文件?
【发布时间】:2020-04-17 07:14:41
【问题描述】:

您可能会告诉我,我是 QT 新手,我正在尝试将控制台应用程序的 src 代码和标头导入到 qt 以构建 GUI。我被困在一个特定的功能上,该功能应该加载文件并逐字阅读。我知道如何在 C++ 中做到这一点,但在 QT 中我已经使用了几个小时,我不太确定如何去做。除了读取文件之外,我还必须使用我自己的个人插入函数(与问题无关)插入一个字符串(或在本例中为 T 类型)。

截至目前,我正在做的事情我知道由于转换原因等原因无法正常工作:

template <typename T>
bool HashTable<T>::load(const char* filename)
{
    QString word;
    QFile inputFile(filename);
    QTextStream fin(filename);
  //  std::ifstream iss;
    QString line;
  //  iss.clear();
   // iss.open(filename);
    while (fin >> word)
    {
        insert(word);
    }
    fin.close();
    return true;
}

【问题讨论】:

  • 我想这就是你要找的东西link
  • QTextStream fin(&amp;inputFile);。一个快速的谷歌发现了这个documentation。学习如何阅读它是一项宝贵的技能。

标签: c++ qt


【解决方案1】:

QTextStream(据我所知)不支持逐字读取文件,它只支持读取一定数量的字符(通过read(qint64 maxlen)),读取整行(通过readLine(qint64 maxlen = 0))或以上的组合。 this answer 中描述了如何执行此操作的示例。

你可以做的——为了得到一个单词列表——是逐行阅读,并用QString'ssplit()函数分割每一行,使用空格作为分隔符。

【讨论】:

    【解决方案2】:
    template <typename T>
    bool HashTable<T>::load(const char* filename)
    {
        QFile inputFile(filename);
        if(!inputFile.open(QIODevice::ReadOnly)) {
            QMessageBox::information(0, "error", inputFile.errorString());
        }
    
        QTextStream fin(&inputFile);
    
        while(!fin.atEnd()) {
    
            QString line = in.readLine();    
            QStringList words = line.split(" ");    
            foreach(QString word, words){
               insert(word); 
            }
    
        }
    
        filename.close();
        return true;
    }
    

    您必须先打开文件进行阅读。然后应该逐行读取文本流。在上面的代码中,我读取了一行,然后使用空格(“”)作为标记将其拆分为单词。然后你可以从 QStringlist 中读取单词。

    【讨论】:

    • 基本上是我写的,但你花时间包含它的代码 :) 希望 OP 真的回来并支持并接受答案。
    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多