2016-08-21 54 views
-1

我發現下面的鏈接,但它是C#: c# Check if all Strings in a String List are the Same.檢查在字符串列表中的所有字符串在Inno Setup的同一

我寫了工作守則,可以完成剩下的很好,但它只有使用Sorted String Lists才能正常運行。

問候,

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

在此先感謝您的幫助。

回答

2

只需在循環之前將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

+0

謝謝你,它運作良好..... – GTAVLover

+0

忽略以前的評論。 – GTAVLover

+0

你的建議讓函數更好,但我仍然希望使用'Sorted = True'來處理StringLists,它們的字符串中有空格。 – GTAVLover

-1

您可以嘗試使用您的字符串進行檢查,如''INSIDE DOUBLE QUOTATION MARKS''。

+0

我還沒有檢查,我會通知你發生了什麼事。我不認爲它會起作用。 – GTAVLover

相關問題