检查Inno Setup中String List中的所有字符串是否相同



我找到了以下链接,但它是c#:c#检查String List中所有字符串是否相同

我写了一个工作代码,可以很好地完成其余的工作,但它只能正确地使用排序字符串列表。

问候,

function StringListStrCheck(const S: String; StringList: TStringList): Boolean;
var
  CurrentString: Integer;
begin
if StringList = nil then
  RaiseException('The StringList specified does not exist');
if StringList.Count = 0 then
  RaiseException('The specified StringList is empty');
if StringList.Count = 1 then
  RaiseException('The specified StringList does not contain multiple Strings');
Result := False;
CurrentString := 1;
Repeat
if (CompareStr( S, StringList.Strings[CurrentString]) = -1) then begin
Result := False;
end;
if (CompareStr( S, StringList.Strings[CurrentString]) = 0) then begin
Result := True;
end;
CurrentString := CurrentString + 1;
Until CurrentString > (StringList.Count - 1 );
end;

如果指定的字符串与指定的字符串列表中的所有其他字符串相同,则返回True。

否则返回False。

但是,问题是,它只能正确地做检查,如果给定的字符串列表排序或它的字符串没有空格。如果给定字符串列表中的任何字符串或所有字符串都有空格,则必须对其进行排序。否则返回True,即使存在不相等的字符串,如Your AplicationYour ApplicationX.

这个StringList的字符串中没有空格:

var
   TestingList1: TStringList;
TestingList1 := TStringList.Create;
TestingList1.Add('CheckNow');
TestingList1.Add('DontCheckIt');
if StringListStrCheck('CheckNow', TestingList1) = True
then
    Log('All Strings are the same');
else
    Log('All Strings are not the same.'); 

正确返回False,可以在日志的输出消息中看到。

这个StringList的字符串中有空格:

var
   TestingList2: TStringList;
TestingList2 := TStringList.Create;
TestingList2.Add('Check Now');
TestingList2.Add('Check Tomorrow');
TestingList2.Add('Dont Check It');
if StringListStrCheck('Check Now', TestingList1) = True
then
    Log('All Strings are the same');
else
    Log('All Strings are not the same.'); 

但是,这里它返回True,即使这些字符串不相同

但是,在我像下面这样排序之后,函数正常工作并按预期返回False。

TestingList2.Sorted := True;
TestingList2.Duplicates := dupAccept;

我想知道为什么这个函数失败,如果给定的StringList的字符串有空格或给定的StringList不排序,也想知道我如何能使这个函数不失败,如果给定的StringList有空格和/或给定的StringList不排序。

提前感谢您的帮助

在循环前将Result设置为True

在循环中,一旦任何字符串不匹配,将其设置为False

Result := True;
CurrentString := 1;
Repeat
  if (CompareStr( S, StringList.Strings[CurrentString]) <> 0) then begin
    Result := False;
    Break;
  end;
  CurrentString := CurrentString + 1;
Until CurrentString > (StringList.Count - 1 );

如果想忽略前后空格,请使用Trim

您可以尝试使用您的字符串来检查,如' ' INSIDE双引号' '。

相关内容

  • 没有找到相关文章

最新更新