QMacros 2017年9月18日提交的版本支持了迭代器,以重复替换某一部分内容。 迭代器的声明: IQMacroIterator = interface [‘{3DB5D84F-0539-4C10-9476-E6B71D3099DE}’] // 开始替换 procedure BeginReplace(AMacro:
分类: QMacros
[QMacros] 复杂宏参数的传递
QMacros 的宏支持传递参数,其参数的格式参照 JSON 执行,所以 QMacros 的参数支持 JSON 所有的数据类型:null、true/false、数值、字符串、对象和数组,字符串中内容的转义也遵守 JSON 的规则。 【注意】 如果 QMacros 调用 Complie 或 Replace 时,标志位指定
[QMacros]示例:使用 QMacros 玩转 HTML 模板
我们在实际开发中,由于各种各样的原因,可能会结合浏览器来实现一些 Delphi 本身不好实现的效果。而如果网页是靠拼字符串来完成,显然其效率不是太理想。而如果结合 QMacros ,你会发现一切都变的那么简单。QMacros 的示例中包含了一个新的 HTML 模板示例代码,我们来解读其中与 QMacros 相关的部分,
[QMacros]更新:新增 MRF_ENABLE_ESCAPE 和 MRF_IGNORE_MISSED 标志位
【更新说明】 新增了两个标志位来更好的支持模板功能: MRF_ENABLE_ESCAPE 启用模板中的转义字符支持,转义字符以反斜线引起,后跟要转义的字符,如果非特殊转义字符,则为后面的字符。QMacros 支持的特殊转义字符包括,其含义和 QJson 的转义支持一致,但\后跟其它字符时,会返回其它字符,而不会出错:
[QMacros] 使用宏替换在百度地图上加标注
这段代码是我实际使用的一段代码,贴出来分享给大家。 procedure TBaiduMapMarker.Changed; var S: String; ASavePoint: Integer; const STempate: String = ‘if(typeof(%MarkerName%) != ”undefine
[QMacros] 教程: 使用 QMacros 从 PHP 脚本中获取使用的变量名称列表
【注】本教程仅出于演示目的,并不代表作者推荐或者反对某种做法,也不代表这些代码有任何其它实际用途。 QMacros 的是一个高效的栈式查找替换引擎,为您提供丰富的功能。下面的代码演示了如何从一段 PHP+HTML 混合代码得到所有的 PHP 定义的变量名(其中源代码放到了Memo1 里,输出的变量名称直接放到了Memo
[QMacros] 更新:增加对用户自定义规则的宏名称解析的支持
QMacros 默认是通过宏的开始字符串和结束字符串来区隔宏名称的。但这并不是所有的时候都能满足我们的需要,比如下面的字符串中,我们用 $ 来开始宏名称,遇到非数字时,宏名称就结束: Replace $1.Name to $2.Name 根据前述规则,$1 和 $2 我们人工就可以解析出两个宏 1 和 2,而由于没有宏
[QMacros] 更新:新增内置的参数化宏定义支持
【更新说明】 新版本的 QMacros 新增宏定义的参数化支持,通过支持参数化,从而让非固定值的宏能够根据参数做出适当的变化,为应用的开发提供更好的支持。 下面是一个参数化宏替换的例子: procedure TForm1.Button1Click(Sender: TObject); var AMgr: TQMacroM
[QMacros] 一个参数化宏替换的示例代码
【注】 QMacros 已经内置了参数化的支持,请大家参考 :[QMacros] 更新:新增内置的参数化宏定义支持 下面的代码是给群里的一位朋友写的 QMacros 的一个简单的示例,通过参数控制宏替换时的值的范围。但这个代码只是一个简单的示例,创建的 PRangeMacro 实例未在最后释放,请大家使用时,自行加上相
[QMacros] 使用模板生成随机电话号码
这是一个使用 QMacros 的 Volatile 类型的宏来实现的小例子,首先我们看代码: procedure TfrmMain.Button1Click(Sender: TObject); var AMacros: TQMacroManager; AReplace:TQMacroComplied; I: Integ
QMacros 更新 – 修正了InternalCompile在编译时比较宏开始位置的一处问题
【问题描述】 函数 InternalCompile 的子函数 TestMacro 在测试是否是宏的起始段时,用的是 CompareMem,而忘记了将 LS 的长度×2,所以造成比较的长度不足,从而可能出现问题(CompareMem(p, pms, LS) 应为 CompareMem(p, pms, LS shl 1)
QMacros 更新 – 增加对单边宏定义的支持
【更新说明】 默认情况下,QMacros 支持的宏定义是包含在开始和结束字符之间的一串内容,如 [MacroName] 。但有些时候,我们的宏可能只有开始符而没有结束符,而是靠标志符的规则来控制宏名称的结束。如下面带参数的 SQL 语句: select * from mytable where id>:id an
[QMacros] 利用模板生成数据库插入语句
QMacros 做为一个模板替换库,拥有良好的属性。结合合适的策略,可以很好的完成复杂的功能。 我们下面的这个例子,试图基于 QMacros 模板生成一个SQL批量插入脚本,首先我们来看下模板定义: insert into mytable(Id,Name,Age,Sex,Scale,Comment) values ([
QMacros 更新 – 新增编译选项和枚举模板使用的宏名称函数
【更新内容】 1、 编译时的标志位新增 MRF_DELAY_BINDING ,当该标志位设计,如果编译时对应的名称的宏未找到,不会抛出异常。用户只需要在第一次调用Replace前为相应的宏赋值入栈当前值即可。 2、TQMacroComplied 新增函数 EnumUsedMacros 函数来枚举模板中使用的类型不是 m
QMacros更新-修正了在Andriod下编译失败的问题
【问题描述】 修正了编译目标环境为在Andriod,报InternalComplie函数参数错误。错误原因是由于传递的参数是Self,而Self在Android平台的编译器中被认为是const类型,而参数要求是一个var类型,因此造成编译失败。 【严重级别】 高 【更新级别】 推荐 【特别感谢】 麦子仲肥
QMacros速度简单评测
【测试说明】 本测试只是对QMacros的性能做一个简单的评价,从而给出一定的建议。受限于测试用例的设计无法覆盖各种情况,这些建议未必一定可靠,需要您自己进行一定的进一步测试。 【测试用例】 本次测试主要对比的是系统自带的StringReplace和QDAC中QString提供的StringReplaceW。从理论上来
QMacros中的保存点详解
保存点是QMacros中的一种用于简化你编程的重要途径。当然,其牺牲了一点点效率来提升用性。 首先,QMacros采用了堆栈式的宏管理机制,所以在添加新宏时,如果新宏的名称与旧宏的名称,它就会覆盖旧的宏定义,从而保证当前替换操作能够正确执行。但在退出当前函数时,我们需要将相应的宏定义出栈以便恢复原始值,以保证调用我们的
QMacros模板编译结果的缓存与重用
QMacros支持模板编译虽然很快,但毕竟需要消耗一定的时间进行转换,而编译一次,将模板再缓存起来供下次重复使用,省去再次编译的过程,显然是一种加速替换速度的一种不错的选择。 QMacros编译返回的是一个TQMacroComplied对象,它提供了相关的函数来支持此功能: 1、SaveToStream/SaveToF
[QMacros]-基本使用方法说明
1、创建一个TQMacroManager对象,它用来管理所有的宏。后面所有的操作都必需基于它。 [Delphi] FMacroMgr:=TQMacroManager.Create; [C++] FMacroMgr=new TQMacroManager; 2、将基本的宏入栈,注意确定宏的类型。具体请参考主题中的【QMac
QMacros该如何处理在内容中出现起始和结束符?
这是一个很现实的问题,比如我们定义了宏的开始符号为 “[” ,宏的结束符为 “]”,那么如果我们要在模板中包含 “[” 和 “]” 该怎么办呢? 答案就是宏转义,我们可以定义宏 MacroStart , MacroEnd 分别对应下面的宏定义,然后入栈如下: AMarcoMgr.Push(‘MacroStart’,'[