使用 Qt 在文本文件中进行比较

Comparison in text file using Qt

我是 UI 使用 Qt 进行设计的初学者。我的项目现在正在做比较。例如:如果我有 2 个文本文件。

如何逐行比较数字?因为我有很多这样的文本文件,我需要通过 one.What 比较它们,我现在只能按行顺序读取文本文件。非常感谢!

基本方法是这样的:

  QString filename1("C:/Users/UserName/Downloads/t1.txt");
  QString filename2("C:/Users/UserName/Downloads/t2.txt");

  QFile file(filename1);
  file.open(QIODevice::ReadOnly);
  QTextStream in(&file);
  QStringList textOfFile1;
  while (!in.atEnd()) {
    QString line = in.readLine();
    textOfFile1.append(line);
  }

  QFile file2(filename2);
  file2.open(QIODevice::ReadOnly);
  QTextStream in2(&file2);
  QStringList textOfFile2;
  while (!in.atEnd()) {
    QString line = in.readLine();
    textOfFile2.append(line);
  }

  if(textOfFile1.size() != textOfFile2) return false;
  for(int i = 0; i < textOfFile1.size(); i++)
  {
      if(textOfFile1[i] != textOfFile2[i]) return false;
  }
  return true;

即您将文件读入 QStringList 并逐行比较列表。通过这种方式,您还可以捕获第一行不匹配的行。请注意,此类比较还考虑了空格,例如 \n \t 等

PS:将读者包装成函数,避免像我一样重复。 :)

希望对您有所帮助 ;)

手续简单

  1. 读取两个文件(始终确保它们已成功打开)
  2. 逐行读取文件并将字符串转换为数字进行比较。
  3. 如果没有剩余数据则退出。

另外,你需要确保文件格式一致,否则,你需要确保你操作的是一个实数。我假设数字是整数,但当然你可以改变它。此类项目需要额外的预防措施。我会留给你的。上述过程的简化代码是

#include <QString>
#include <QFile>
#include <QDebug>
#include <QTextStream>


int main()
{
    QFile data1("text1.txt");
    if (!data1.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug() << "text1.txt file can't be opened...";
        return -1;
    }

    QFile data2("text2.txt");
    if (!data2.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug() << "text2.txt file can't be opened...";
        return -1;
    }


    QTextStream in1(&data1), in2(&data2);

    while ( !in1.atEnd() && !in2.atEnd() ) {
        QString num1 = in1.readLine();
        QString num2 = in2.readLine();
        if ( num1.toInt() > num2.toInt() )
            qDebug() << num1.toInt() << ">" << num2.toInt(); 

        // do the rest of comparison
    }

    return 0;
}

现在就我而言,txt 文件是

text1.txt

1
2
3
4

text2.txt

3
5
1
6

输出为

3 > 1

编辑:OP 正在寻找差异及其总和。

int sum(0);
while ( !in1.atEnd() && !in2.atEnd() ) {
    QString num1 = in1.readLine();
    QString num2 = in2.readLine();
    int result = num1.toInt() - num2.toInt();
    qDebug() << num1.toInt() << "-" << num2.toInt() << " = " << result;
    sum += result;
 }
 qDebug() << "sum = " << sum;