Inno setup Inno设置-禁用(注释掉)INI文件中密钥的所有实例

Inno setup Inno设置-禁用(注释掉)INI文件中密钥的所有实例,inno-setup,pascalscript,Inno Setup,Pascalscript,我有一个INI文件,可以这样说: [Section] Key=Value 我需要把它改成这样 [Section] ;Key=Value 反之亦然。是的,基本上我需要完全禁用钥匙。我尝试使用StringChange和CompareStr。问题是,我需要编辑的特定INI有几个同名键(是的,我确信它是II,它是正确的,应该是这样。每次值都不同),因此CompareStr在这种情况下没有多大帮助。在这种情况下,哪个函数更实用?如果要注释掉键=的第一个实例,请使用找到它并插入使用: 函数禁用first

我有一个INI文件,可以这样说:

[Section]
Key=Value
我需要把它改成这样

[Section]
;Key=Value

反之亦然。是的,基本上我需要完全禁用钥匙。我尝试使用
StringChange
CompareStr
。问题是,我需要编辑的特定INI有几个同名键(是的,我确信它是II,它是正确的,应该是这样。每次值都不同),因此
CompareStr
在这种情况下没有多大帮助。在这种情况下,哪个函数更实用?

如果要注释掉
键=
的第一个实例,请使用找到它并插入
使用:

函数禁用firstkey(var INI:string;Key:string):布尔;
变量
P:整数;
开始
P:=Pos(Key+'=',INI);
结果:=(P>0);
如果结果是这样的话
插入(“;”,INI,P);
结束;

如果要注释掉
键=
的所有实例,请使用。要跳过已注释掉的行,请确保
键=
前面有一个新行字符(LF=
#10

{插入;在所有键=…行前面。}
{保持已注释行的完整性。}
{如果进行了任何替换,则返回true。}
{仅适用于具有Windows样式EOL的文件(CRLF)}
函数DisableAllKeys(var INI:string;Key:string):布尔;
开始
结果:=(StringChangeEx(INI,#10+Key+'=',#10+';'+Key+'=',False)>0);
结束;
{从所有;键=…行中删除;}
{保持已启用的行不变。}
{如果进行了任何替换,则返回true。}
{仅适用于具有Windows样式EOL的文件(CRLF)}
函数EnableAllKeys(var INI:string;Key:string):布尔值;
开始
结果:=(StringChangeEx(INI,#10+';'+键+'=',#10+键+'=',False)>0);
结束;
所以我最终使用了这个(也就是说,没有马丁的帮助):

唯一的问题是
禁用电影
不会导致,例如
;Key=Value1,但它是
;;;Key=Value1
无论出于何种原因,它仍然有效


非常感谢马丁的耐心。有一些沟通错误的问题,主要是因为,虽然我知道我想要什么,但我不知道如何“形成”正确的问题。

对不起,我当时正在工作。事实上,我需要禁用它们。但是我想分别处理它们,这样我可以检查它们是否都已启用/禁用。反之亦然?我需要查看该行是否被注释掉,并取消注释。或者我需要为此创建一个单独的问题吗?这就是我试图使用b4发布问题的原因,但我必须使用
CompareStr
来确定它是否被禁用。正如你所看到的(在我的另一个问题中),它不起作用。但我一到家就试试你关于修剪的建议。“StringChange已经做了比较”-我不确定我理解你的意思。我需要编辑的文件实际上有三个具有相同名称(和不同值)的键。我需要Inno检查这三个是否都被禁用(分号出现),并返回一个rue结果(只有当这三个都被禁用时,如果其中至少有一个未被禁用,则应返回false)。现在,我尝试使用
CompareStr
查看键的当前“状态”(启用/禁用)。现在我回来了,我会试试你的建议(关于修剪)。我还从来没有听说过
StringChange
做过任何形式的比较,你总是换话题。您以前的请求提供了一种禁用所有已启用行或启用所有已禁用行的方法。这就是
StringChange
可以做的,但有一些限制(您最初的帖子标题为“编辑INI密钥名”)。现在,您需要一个函数来检查是否有任何启用/禁用的键。那么您到底想要什么呢?将此添加到我的代码中会导致
code
部分的第一行出现错误“Variable expected”,即
var AppLoc:String要么你没有完整复制我的代码,要么你的代码有冲突。您的代码中是否已经使用了符号
禁用键
启用键
?我们不可能用这么少的信息找出问题所在。我使用
StringChange
让脚本正常工作。不过,我不知道该把它贴在哪里。我应该编辑这个问题吗?你为什么要发布它?你的意思是说你使用了与我提议的不同的解决方案?在这种情况下,发布一个新的答案。
function DisabeMovies: Boolean;
var
  A: AnsiString;
  U: String;
begin
if Standalone then
  AppLoc := RemoveQuotes(CurrentAppLoc(''))
else
  AppLoc := RemoveQuotes(CurrentAppLoc('')) + '\FrankenStein\';
  LoadStringFromFile(AppLoc + 'Base.ini', A);
  U := A;
        StringChange(U, 'Key=Value1', ';Key=Value1');
        StringChange(U, 'Key=Value2', ';Key=Value2');
        StringChange(U, 'Key=Value3', ';Key=Value3');
  A := U;
        SaveStringToFile(AppLoc + 'Base', A, False);
End;

function EnableMovies: Boolean;
var
  A: AnsiString;
  U: String;
begin
if Standalone then
  AppLoc := RemoveQuotes(CurrentAppLoc(''))
else
  AppLoc := RemoveQuotes(CurrentAppLoc('')) + '\FrankenStein\';
  LoadStringFromFile(AppLoc + 'Base.ini', A);
  U := A;
        StringChange(U, ';Key=Value1', 'Key=Value1');
        StringChange(U, ';Key=Value2', 'Key=Value2');
        StringChange(U, ';Key=Value3', 'Key=Value3');
  A := U;
        SaveStringToFile(AppLoc + 'Base.ini', A, False);
End;