使用Qt在文本文件中进行比较
我是使用Qt进行UI设计的初学者。我的项目现在正在做比较。例如:如果我有2个文本文件使用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
如何逐行比较数字?因为我有这么多这样的文本文件,我需要一个一个地比较它们。我现在能做的就是按行顺序读取文本文件。非常感谢你 基本方法如下:
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;