检查字符串列表中的所有字符串在Inno Setup中是否相同

时间:2016-08-21 07:53:57

标签: inno-setup pascalscript tstringlist

我找到了以下链接,但它适用于C#: c# Check if all Strings in a String List are the Same.

我编写了一个可以完成其余工作的代码,但它只能在排序字符串列表中正常运行。

此致

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。

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

,也会返回True

示例

此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,可以在Log中的输出消息中看到。

此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没有排序。

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

只需在循环前将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

如果要忽略前导和尾随空格,请使用In [31]: df = pd.DataFrame(np.random.randint(0, 5, (10, 2)), columns=['id','value']) In [32]: df Out[32]: id value 0 2 4 1 4 0 2 3 1 3 4 2 4 4 1 5 2 3 6 1 0 7 3 2 8 2 2 9 1 1 In [33]: df.groupby('id')['value'].apply(lambda x: x.max() - x.min()).reset_index() Out[33]: id value 0 1 1 1 2 2 2 3 1 3 4 2

答案 1 :(得分:-1)

您可以尝试使用您的字符串进行检查,例如&#39;&#34; INSIDE DOUBLE DOTBLE QUOTATION MARKS&#34;&#39;。