使用 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:将读者包装成函数,避免像我一样重复。 :)
希望对您有所帮助 ;)
手续简单
- 读取两个文件(始终确保它们已成功打开)
- 逐行读取文件并将字符串转换为数字进行比较。
- 如果没有剩余数据则退出。
另外,你需要确保文件格式一致,否则,你需要确保你操作的是一个实数。我假设数字是整数,但当然你可以改变它。此类项目需要额外的预防措施。我会留给你的。上述过程的简化代码是
#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;
我是 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:将读者包装成函数,避免像我一样重复。 :)
希望对您有所帮助 ;)
手续简单
- 读取两个文件(始终确保它们已成功打开)
- 逐行读取文件并将字符串转换为数字进行比较。
- 如果没有剩余数据则退出。
另外,你需要确保文件格式一致,否则,你需要确保你操作的是一个实数。我假设数字是整数,但当然你可以改变它。此类项目需要额外的预防措施。我会留给你的。上述过程的简化代码是
#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;