Qt实现读Html文件并替换里面的标签内容

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();
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓琴儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值