论坛风格切换切换到宽版
  • 1808阅读
  • 3回复

请教老虎版主这个脚本怎么理解 [复制链接]

上一主题 下一主题
离线546242502
 

发帖
332
金钱
-3060
威望
-306
只看楼主 倒序阅读 0 发表于: 2015-08-13
如果文本文件中指定字符串不存在则写入一个字符串,应该怎么做?要求如下:
如果 ini 文本文件的 [AAA] 下键值 BBB 不存在,则在[AAA]下写入键及其值 CCC

------------------------------->>
当[AAA]下某键值 BBB 不存在的时候,在[AAA]下写入ZYX=CCC
  1. procedure DoSomething;
  2. var
  3. aos: TArrayOfString;
  4. i: Integer;
  5. SecName, sLine, sValue: String;
  6. Found: boolean;
  7. begin
  8. if LoadStringsFromFile(ExpandConstant('{app}\abc.ini'), aos) then
  9.   begin
  10.   Found:= false;
  11.   SecName:= '';
  12.   sValue:= '';
  13.   for i:= 0 to GetArrayLength(aos)-1 do
  14.     begin
  15.     sLine:= Trim(aos[i]);
  16.     if (copy(sLine, 1, 1)='[') and (copy(sLine, Length(sLine), 1)=']') then
  17.        SecName:= copy(sLine, 2, Length(sLine)-2);
  18.     if (Pos('=', sLine) <> 0) and (copy(sLine, 1, 1) <> ';') and (copy(sLine, 1, 1) <> '#') then
  19.        sValue:= Trim(copy(sLine, Pos('=', sLine)+1, Length(sLine)-Pos('=', sLine)));
  20.     if (SecName='AAA') and (sValue='BBB') then
  21.        Found:= true;
  22.     end;
  23.   If not Found then
  24.     SetIniString('AAA', 'ZYX', 'CCC', ExpandConstant('{app}\abc.ini'));
  25.   end;
  26. end;


我新建了一个abc.ini文件,内容:
[AAA]
A=1


然后套用上面的脚本,安装后什么事都没发生?
不知道我理解错了没,它是[AAA]段中没有一个???=BBB的话就在[AAA]下写入ZYX=CCC,但是我测试没有效果?
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2015-08-13
procedure DoSomething;
var
aos: TArrayOfString;
n: Integer;
SecName, sLine, sValue: String;
Found: boolean;
begin
if LoadStringsFromFile(ExpandConstant('{app}\abc.ini'), aos) then
  begin
  Found:= false;
  SecName:= '';
  sValue:= '';
  for n:= 0 to GetArrayLength(aos)-1 do
    begin
    sLine:= Trim(aos[n]);
    if (copy(sLine, 1, 1)='[') and (copy(sLine, Length(sLine), 1)=']') then
       begin
       SecName:= copy(sLine, 2, Length(sLine)-2);
       sValue:= '';              // 一旦找到新的区段,就要把上一段找到的值重置
       end;
    if (Pos('=', sLine) <> 0) and (copy(sLine, 1, 1) <> ';') and (copy(sLine, 1, 1) <> '#') then
       sValue:= Trim(copy(sLine, Pos('=', sLine)+1, Length(sLine)-Pos('=', sLine)));
    MsgBox('Section: ' + SecName + #10#13 + 'Value: ' + sValue, mbInformation, MB_OK);
    if (SecName='AAA') and (sValue='BBB') then
       Found:= true;
    end;
  If not Found then
    SetIniString('AAA', 'ZYX', 'CCC', ExpandConstant('{app}\abc.ini'));
  end;
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 2 发表于: 2015-08-13
我用下面的两个 ini 文件测试了,没有问题:

[TTT]
111=222
123=BBB
[AAA]
A=1
[XXX]
222=333

或者
  
[TTT]
111=222
123=BBB
[AAA]
A=1
X=BBB
[XXX]
222=333
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 3 发表于: 2015-08-13
回 2楼(gnatix) 的帖子
gnatix:我用下面的两个 ini 文件测试了,没有问题: [TTT]111=222123=BBB....... (2015-08-13 19:37) 

谢谢老虎版主,测试正常了