C++ QT实现文本文件行首#前添加*或相关修改的技术问询
Qt C++ 实现文本文件逐行处理
下面是三种符合你需求的实现方案,使用Qt的文件操作类完成,代码简洁易维护:
方案一:给#开头的行前添加*(输出*#house)
核心逻辑:读取每行后判断是否以#开头,若是则在头部拼接*,否则保持原行不变。
#include <QFile> #include <QTextStream> #include <QString> int main() { // 原文件路径和输出文件路径(建议用新文件避免覆盖原数据) const QString inputFilePath = "input.txt"; const QString outputFilePath = "output1.txt"; QFile inputFile(inputFilePath); QFile outputFile(outputFilePath); // 打开输入文件为只读模式,输出文件为写入模式 if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text) || !outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) { return 1; // 文件打开失败,返回错误码 } QTextStream in(&inputFile); QTextStream out(&outputFile); // 逐行读取处理 while (!in.atEnd()) { QString line = in.readLine(); if (line.startsWith('#')) { out << "*" << line << "\n"; // 头部加*后写入 } else { out << line << "\n"; // 原行写入 } } // 关闭文件 inputFile.close(); outputFile.close(); return 0; }
方案二:将#开头的行替换为house(输出house)
核心逻辑:判断行以#开头后,直接写入固定字符串*house。
#include <QFile> #include <QTextStream> #include <QString> int main() { const QString inputFilePath = "input.txt"; const QString outputFilePath = "output2.txt"; QFile inputFile(inputFilePath); QFile outputFile(outputFilePath); if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text) || !outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) { return 1; } QTextStream in(&inputFile); QTextStream out(&outputFile); while (!in.atEnd()) { QString line = in.readLine(); if (line.startsWith('#')) { out << "*house\n"; // 直接写入固定内容 } else { out << line << "\n"; } } inputFile.close(); outputFile.close(); return 0; }
方案三:将#开头的行直接替换为*(输出*)
核心逻辑:判断行以#开头后,写入单个*。
#include <QFile> #include <QTextStream> #include <QString> int main() { const QString inputFilePath = "input.txt"; const QString outputFilePath = "output3.txt"; QFile inputFile(inputFilePath); QFile outputFile(outputFilePath); if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text) || !outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) { return 1; } QTextStream in(&inputFile); QTextStream out(&outputFile); while (!in.atEnd()) { QString line = in.readLine(); if (line.startsWith('#')) { out << "*\n"; // 写入单个* } else { out << line << "\n"; } } inputFile.close(); outputFile.close(); return 0; }
注意事项
- 建议使用新文件存储处理结果,避免操作失误导致原文件数据丢失;若需要覆盖原文件,可在处理完成后替换文件(需确保处理逻辑正确)。
QTextStream会自动处理不同平台的换行符,无需手动适配Windows/Linux/macOS的换行差异。- 若文件较大,逐行读取的方式能保证内存占用较低,不会出现内存溢出问题。
内容的提问来源于stack exchange,提问作者rut
相关产品推荐
相关产品推荐

