鉴于NSIS处理字符功能有太多局限,特开发外部DLL库用于NSIS字符文本&文本文件的处理。
注: 第三方DLL不是NSIS插件,但能够和插件一样甚至更强大一些。
此外部DLL库由“见与不见”同学开发,轻狂志首发。
轻狂写了几个示例代码:
!define PRODUCT_NAME "文本操作外部DLL库测试" SetCompressor /SOLID lzma Name "${PRODUCT_NAME}" OutFile "文本操作外部DLL库测试.exe" SilentInstall silent Section /* 1.文本_到大写 Text_to_uppercase 子程序名:文本_到大写 把字母转换到大写 返回值类型:文本型 参数<1>的名称为"要转换的文本",类型为"文本型"。注明:要转换的文本。 */ strcpy $R1 "aabcdfefgaa" System::Call 'Stringplug::Text_to_uppercase(m)(R1)m.R0' MessageBox MB_ICONINFORMATION|MB_OK '$R1 转换为 $R0' /* 2.文本_到小写 Text_to_lowercase 子程序名:文本_到小写 把字母转换到小写 返回值类型:文本型 参数<1>的名称为"要转换的文本",类型为"文本型"。注明:要转换的文本。 */ strcpy $R1 "aaADbcdfFefgaGDa" System::Call 'Stringplug::Text_to_lowercase(m)(R1)m.R0' MessageBox MB_ICONINFORMATION|MB_OK '$R1 转换为 $R0' /* 3.文本_取出现次数 Text_times 子程序名:文本_取出现次数 返回值类型:整数型 参数<1>的名称为"被搜索文本",类型为"文本型"。 参数<2>的名称为"欲搜索文本",类型为"文本型"。 参数<3>的名称为"是否区分大小写",类型为"整数型",0=不区分 1=区分大小写,允许接收空参数数据,默认不区分。 */ strcpy $R1 "aaADbcdfFefgaGDa" System::Call 'Stringplug::Text_times(m,m,i)(R1,"A","1")m.R0' MessageBox MB_ICONINFORMATION|MB_OK 'A 共出现了 $R0 次' /* 4.文本_替换 Text_replacement 子程序名:文本_替换 批量替换文本; 返回值类型:文本型 参数<1>的名称为“原文本”,类型为“文本型”。 参数<2>的名称为“欲被替换的子文本1”,类型为“文本型”。 参数<3>的名称为“用作替换的子文本1”,类型为“文本型”。 参数<4>的名称为“替换进行的次数”,类型为“整数型”,允许接收空参数数据。 注明:可空;参数值指定对子文本进行替换的次数。如果省略,默认进行所有可能的替换。 参数<5>的名称为“是否区分大小写”,类型为“整数型”,0=不区分 1=区分大小写,允许接收空参数数据,默认不区分。 注明:可空; 初始值为“0”不区分大小写;为“1”区分大小写。 */ strcpy $R1 "aabcdfefgaa" #### m=文本型 i=整数型 #### System::Call 'Stringplug::Text_replacement(m,m,m,i,i)(R1,"AA","AB",,"0")m.R0' ;注: (m,m,i)参数类型 (R1,R2,1) 参数信息 MessageBox MB_ICONINFORMATION|MB_OK '$R1 替换为 $R0' SectionEnd Function .onInit InitPluginsDir File /oname=$PLUGINSDIR\StringPlug.dll "StringPlug.dll" System::Call 'kernel32::LoadLibraryA(m "$PLUGINSDIR\StringPlug.dll")' #把DLL加载到内存 FunctionEnd Function .onGUIEnd System::Free FunctionEnd |
上述代码只是抛砖引玉,呵呵,此DLL的功能当然不止于此,更多实用功能,您还是下载回去慢慢研究吧。