·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化时事 >> 论坛集萃 >> 如何用 INNO SETUP 查找和替换文本字符串, 回答 liangjh 的问题    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

如何用 INNO SETUP 查找和替换文本字符串, 回答 liangjh 的问题

作者: gnatix 来源:汉化新世纪论坛 时间:2005-09-14 点击:14401

以下是引用片段:
在 inno 中,如果想在安装后替换一个文本文件的内容,是否可以通过脚本实现

比如,文本中有这样一句
C:\aaa
安装后,假设安装目录为 c:\setup
那么希望把所有的 c:\aaa 替换成 c:\setup



理解为你要替换的不是某一行,而是把所有出现的 C:\aaa 替换成软件的安装目录。

以下的脚本是在安装结束时完成该任务。脚本仅供参考:

以下是代码片段:
procedure CurStepChanged(CurStep: Integer);
var
IniFile, OldString, NewString: string;
IniFileLines: TArrayOfString;
i: Integer;
begin
if CurStep = csFinished then
begin
IniFile:= ExpandConstant({app}\myfile.ini); // 你的 INI 文件名
OldString:=C:\aaa; // 要替换的旧字符串
NewString:= ExpandConstant({app}); // 新字符串

LoadStringsFromFile(IniFile, IniFileLines);
for i:= 0 to GetArrayLength(IniFileLines)-1 do
if (Pos(OldString, IniFileLines[i]) > 0) then
StringChange(IniFileLines[i], OldString, NewString);
SaveStringsToFile(IniFile, IniFileLines, False);
end;
end; 

 



liangjh

谢谢虎兄!

真是难者不会啊,我昨天还在code段写个批处理文件,然后调用外部程序完成呢,但是太罗嗦了,虎兄的这个,真是强
editplus的语法文件保存在setting.ini里面,替换了一下,实践成功

以下是代码片段:
procedure CurStepChanged(CurStep: Integer);
var
IniFile, OldString, NewString: string;
IniFileLines: TArrayOfString;
i: Integer;
begin
if CurStep = csFinished then
begin
IniFile:= ExpandConstant({app}\setting.ini); // 你的 INI 文件名
OldString:=C:\Program Files\EditPlus 2\; // 要替换的旧字符串
NewString:= ExpandConstant({app}\); // 新字符串

LoadStringsFromFile(IniFile, IniFileLines);
for i:= 0 to GetArrayLength(IniFileLines)-1 do
if (Pos(OldString, IniFileLines[i]) > 0) then
StringChange(IniFileLines[i], OldString, NewString);
SaveStringsToFile(IniFile, IniFileLines, False);
end;
end;


正在看看是否可以只有在选定对应组件时才执行该操作,看起来好像是通过两个if语句传递参数组件的 uncheck 参数

跟着虎兄学了不少东西

 

gnatix

以下是引用片段:
(liangjh @ 2004年08月20日 15时24分) 
正在看看是否可以只有在选定对应组件时才执行该操作,看起来好像是通过两个if语句传递参数组件的 uncheck 参数


假如你定义了一个名称为 ModifyIni 的组件并且希望只有在用户选定了该组件时才对 INI 文件进行修改,那么你只要把上面脚本中的语句
if CurStep = csFinished then
改成
if (CurStep = csFinished) and (Pos(ModifyIni,WizardSelectedComponents(false))>0) then
就行了。

假如你定义了一个名称为 ModifyIni 的 Task 并且希望只有在用户选定了该 Task 时才对 INI 文件进行修改,那么你只要把上面脚本中的语句
if CurStep = csFinished then
改成
if (CurStep = csFinished) and (Pos(ModifyIni,WizardSelectedTasks(false))>0) then
就行了。

以下是引用片段:
(zonghan @ 2005年09月12日 22时58分) 
Sorry~旧帖翻起来再发个问!!

请教虎兄~如果我想要在一个无副档名的文件
最底下一行加入一行文字我该怎么做!!

如果副档名非ini ,那以上脚本中的IniFile应该改成什么呢??
 
 用:
SaveStringToFile(你的文件, #13#10 + 要添加的行 + #13#10, True);

#13#10 表示换行
 
以下是引用片段:
(zonghan @ 2005年09月13日 11时31分) 
QUOTE(gnatix @ 2005年09月13日 09时10分)
用:
SaveStringToFile(’你的文件’, #13#10 + ’要添加的行’ + #13#10, True); 

#13#10 表示换行





Sorry不知道要把原来的哪些内容替换掉呢? @@"

假设C:\底下有一文件档名为zonghan,想要在文件内容的最底下一行
插入一行内容
并不需要上述范例的搜寻替换功能

可否说一下具体该怎么写  

使用第一楼的code内容编译时出现如图错误

*
以下是代码片段:
procedure CurStepChanged(CurStep: Integer);
begin
if CurStep = ssDone then
SaveStringToFile(’C:\zhonghan’, #13#10 + ’这是新添加的行’ + #13#10, True); 
end;

restools:

以下是代码片段:
procedure CurStepChanged(CurStep: Integer);
begin
if CurStep = ssDone then
SaveStringToFile(’C:\zonghan’, #13#10 + ’74INGK91R95C5T3’ + #13#10, True);
end;


改成

以下是代码片段:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
SaveStringToFile(’C:\zonghan’, #13#10 + ’74INGK91R95C5T3’ + #13#10, True);
end;

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): INNO 字串 安装

·上一篇: INNO & NSIS 双剑合璧, 调用 NSIS 插件的通用插件 ·下一篇: 一种BT的Delphi窗体防汉化方法

· 版权申明: 本文引自《汉化新世纪论坛》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《汉化新世纪论坛》[ 作者: gnatix],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号