Qt操作Html文件的内容:
-
若在Visual Studio中使用Qt进行开发
请加上#pragma execution_character_set(“utf-8”),指定字符文本和字符串执行的字符集,否则QString中查找和替换中文字符时,出现异常。这是因为在Visual Studio开发时,在复制其他代码到VS的编辑器时,可能会导致UTF-8编码变成GB2312简体。 -
QString在使用indexOf()函数索引(查找)字符串时,请在判断成功的操作时,请与-1进行比较进行判断是否索引到字符串。
-
QFile和QTextStream实现按行读取文本文件的数据
-
QRegExp使用正则表达式进行字符串的匹配
#include <QtCore/QCoreApplication>
#include <QTextCodec>
#include <QFile>
#include <QDebug>
#include <QTextStream>
#include <QRegExp>
#ifdef _MSC_VER
#pragma execution_character_set("utf-8")
#endif
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString fileName = "report1.html";
QString content;
QString newContent;
QRegExp rx("[0-9]+");
QFile file(fileName);
int numFlag = 0;
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream stream(&file);
stream.setCodec("UTF-16");
QString chart1Total;
while (!stream.atEnd()) {
numFlag++;
content = stream.readLine();
if (content.indexOf("Out of date") > -1)
{
content = content.replace(QStringLiteral("Out"), QStringLiteral("Up"));
qDebug() << content;
}
else if (content.indexOf("过期") > -1)
{
content = content.replace(QObject::tr("过期"), QObject::tr("最新"));
qDebug() << content;
}
if (numFlag >= 50 && numFlag <= 53) {
//Total
int pos = 0;
while ((pos = rx.indexIn(content, pos)) != -1) {
qDebug() << content;
chart1Total = rx.cap(0);
pos += rx.matchedLength();
qDebug() << chart1Total;
qDebug() << content;
break;
}
}
if (numFlag >= 54 && numFlag <= 57) {
//Up to Date
int pos = 0;
while ((pos = rx.indexIn(content, pos)) != -1) {
qDebug() << content;
QString ret = rx.cap(0);
pos += rx.matchedLength();
qDebug() << ret;
content.replace(ret, chart1Total);
qDebug() << content;
break;
}
}
if (numFlag >= 58 && numFlag <= 61) {
int pos = 0;
while ((pos = rx.indexIn(content, pos)) != -1) {
qDebug() << content;
pos += rx.matchedLength();
QString ret = rx.cap(0);
qDebug() << ret;
content.replace(ret, "0");
qDebug() << content;
break;
}
}
newContent += (content + "\n");
}
}
file.close();
//qDebug() << newContent;
QFile newFile(fileName);
if (newFile.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream in(&newFile);
in.setCodec("UTF-16");
in << newContent;
file.close();
}
return a.exec();
}