Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Qt在文本文件中进行比较_Qt_User Interface_Qtextedit - Fatal编程技术网

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

使用Qt在文本文件中进行比较,qt,user-interface,qtextedit,Qt,User Interface,Qtextedit,我是使用Qt进行UI设计的初学者。我的项目现在正在做比较。例如:如果我有2个文本文件 如何逐行比较数字?因为我有这么多这样的文本文件,我需要一个一个地比较它们。我现在能做的就是按行顺序读取文本文件。非常感谢你 基本方法如下: QString filename1("C:/Users/UserName/Downloads/t1.txt"); QString filename2("C:/Users/UserName/Downloads/t2.txt"); QFile file(file

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


如何逐行比较数字?因为我有这么多这样的文本文件,我需要一个一个地比较它们。我现在能做的就是按行顺序读取文本文件。非常感谢你

基本方法如下:

  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;
QString文件名1(“C:/Users/UserName/Downloads/t1.txt”);
QString文件名2(“C:/Users/UserName/Downloads/t2.txt”);
QFile文件(filename1);
open(QIODevice::ReadOnly);
文件中的QTextStream(&F);
QStringList textOfFile1;
而(!in.atEnd()){
QString line=in.readLine();
textOfFile1.追加(行);
}
QFile file2(filename2);
file2.open(QIODevice::ReadOnly);
QTextStream in2(&file2);
QStringList textOfFile2;
而(!in.atEnd()){
QString line=in.readLine();
textOfFile2.追加(行);
}
if(textOfFile1.size()!=textOfFile2)返回false;
对于(int i=0;i
i、 你将文件读入QStringList,然后逐行比较列表。通过这种方式,您还可以看到第一行中存在不匹配的地方。请注意,这种比较还考虑了空格,如\n\t等

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


希望这有帮助;)

程序很简单

  • 读取两个文件(始终确保已成功打开)
  • 逐行读取文件,并将字符串转换为数字进行比较
  • 如果没有剩余数据,请退出
  • 此外,您需要确保文件的格式是一致的,否则,您需要确保您操作的是实数。我假设数字是整数,当然你可以改变它。这种项目需要额外的预防措施。我将把它留给你。上述程序的简化代码如下所示

    #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;
    }
    
    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;
    
    int和(0);
    而(!in1.atEnd()&&!in2.atEnd()){
    QString num1=in1.readLine();
    QString num2=in2.readLine();
    int result=num1.toInt()-num2.toInt();
    
    qDebug()@JLev嗨,实际上我不知道,我现在可以使用textEdit逐行读取文本文件。所以,你真正的问题是如何比较两个字符串?如果文件中有非常精确的格式(比如:每行1个整数)。您可以创建一个像QVector这样的数据结构,并实现两个向量的比较。您想向用户显示比较结果还是只显示一些结果?像diff工具,还是只显示一个报告?@ymoreau Hi,是的,实际上每行有11个类似于0.002的浮点数。比较后,我想按顺序列出它们,例如文本文件谁在每一行之间有更大的差异,谁会把它放在另一行的前面。@jycjo那么它与GUI无关,对吗?你只需要一个算法?我想你甚至不需要Qt,这取决于你的需要。只要为每个包含浮动的文件创建一个数据结构,创建一个保留文件名和浮点数列表,并在函数中实现所需的比较算法(差异的平均值、差异的总和?无论什么)。然后,您可以在另一个数据结构中对对象进行排序并显示它们(检查QListView和QListModel)。谢谢你的帮助,实际上我想知道哪个文件更大,例如,第一个文件比第二个文件大,因为2>1,4=4,8>8。我可以保证每个文件都不一样。1)使用
    str.simplified()删除字符串中的空格;
    函数。然后您只需将字符串转换为float。如
    myvar.toFloat()
    然后您可以比较它们:)如果有帮助,请接受我的asnwer。谢谢!非常感谢,虽然我想创建一个数组来逐个比较它们,但这个答案为我展示了一种完成项目的方法,再次感谢。对不起,您知道如何创建数组来逐行比较它们吗?为什么需要数组?!对不起,我想错了。但是如果我需要每行中它们之间差异的结果?我怎么能得到它?我不明白你想要什么。你已经有了每行的比较。
    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;