C++ 在Qt中使用文件
假设我在一个文件中写入一些信息,它以C++ 在Qt中使用文件,c++,qt,file,file-io,C++,Qt,File,File Io,假设我在一个文件中写入一些信息,它以n周期写入,例如: a,a,a,a, b,b,b,b, c,c,c,c, a,a,a,a, b,b,b,b, c,c,c,c, ....... a,a,a,a, b,b,b,b, c,c,c,c, 现在我想打开文件检查第一行,找到它重复的地方,然后删除所有内容。在我的例子中,假设我想在a,a,a,a,再次相遇的地方结束,然后删除它,以及之后的所有内容,取而代之的是以下内容: a,a,a,a, b,b,b,b, c,c,c,c, 问:我该怎么做呢?您想删除文
n
周期写入,例如:
a,a,a,a,
b,b,b,b,
c,c,c,c,
a,a,a,a,
b,b,b,b,
c,c,c,c,
.......
a,a,a,a,
b,b,b,b,
c,c,c,c,
现在我想打开文件检查第一行,找到它重复的地方,然后删除所有内容。在我的例子中,假设我想在a,a,a,a,
再次相遇的地方结束,然后删除它,以及之后的所有内容,取而代之的是以下内容:
a,a,a,a,
b,b,b,b,
c,c,c,c,
问:我该怎么做呢?您想删除文件中的重复行。如果你按照下面的步骤去做,你会得到你想要的
- 创建一个将存储唯一行散列的向量(
),注意使用QVector
会更快李>QMap
- 创建输出文件
- 计算文件中每一行的哈希值。使用或(在这种情况下,向量应为
)。uints
- 如果计算的哈希包含在向量中,请跳过此行
- 否则,将哈希添加到向量,并将该行打印到输出文件
- 最后,输出文件应仅包含输入文件的唯一实例
int lineCounter = 0; //count for line
QFile f(filePath);
if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
QTextStream stream(&f);
QString line;
// read the first line
line = stream.readLine();
lineCounter++;
QString hash = QString(QCryptographicHash::hash(line.toAscii(), QCryptographicHash::Md5).toHex());
do
{
line = stream.readLine();
if (QString(QCryptographicHash::hash(line.toAscii(), QCryptographicHash::Md5).toHex()).compare(hash) == 0)
{
// Save data from 1st line to "lineCounter" to new file, or do your own works;
// and then break;
}
lineCounter++;
} while (!line.isNull());
@Angew我不知道如何直接在文件中完成。看一下。首先浏览
QFile
docs,阅读你发现的所有相关内容。然后将问题细化为更具体一点……嗨,谢谢你的回答。这实际上不适合我,因为周期数可能非常大,我不想继续RAM中的信息太多了。我想直接在文件中执行所有操作。@Mike创建了一个临时文件。无法在文件的中间插入或删除。不确定是否需要,但听起来很像。