2016-03-14 23 views
0

我使用以下函數來搜索我正在從文件中讀取的TStringList。 我知道,當我搜索一個值時,我需要的返回值總是在具有我搜索的項目之後的行上。 它一直使用POS來搜索,但現在該文件已被擴展,我必須尋找2項'Adresse'和'Adresse 2' 這給了我一個問題,因爲pos在這兩種情況下找到'Adresse',我的數據是錯誤的。使用POS搜索i TStringList - 需要更高級的方法

是否有另一種搜索字符串的子字符串,我不知道或我必須做我自己的方法。

function FindValue(const aFilename, aSearch: string): string; 
var 
    InfoList: TStringList; 
    Counter: integer; 
begin 
    InfoList := TStringList.Create; 
    try 
    InfoList.LoadFromFile(aFilename); 
    if InfoList.Count > 0 then 
     for Counter := 0 to InfoList.Count - 1 do 
     begin 
      if Pos(aSearch, Infolist.Strings[Counter]) > 0 then 
      Result := Infolist.Strings[Counter + 1] 
     end 
    else 
     Result := ''; 
    finally 
    InfoList.Free; 
    end; 
end; 

有關信息:TStringList的輸入來自從HTML文件中提取的文本文件。 文件的樣本可能是:

OZ8HP 
Hugo Pedersen 
Radioamatør 
Nykøbing M 
Sendeposition: 
Adresse: 
Prinsensvej 18 
Postnummer: 
7900 
Bynavn: 
Nykøbing M 
Antenne højde (m): 
Kote (m):?Kote (m):Brugerens/tilladelsesindehaverens øvrige adresseoplysninger så som Stednavn og/eller Postboks. Hjælpetegnet * kan anvendes, som beskrevet i hjælp. 
Koordinater: 
Geografisk anvendelse: 
Frekvensmaske: 
Tekniske specifikationer: 
Sendeeffekt basisstation: 
Sendeeffekt mobile anlæg: 
Båndbredde (MHz): 
Antal anlæg: 
MMSI: 
Kaldesignaltype: 
Personlig 
Frekvenskategori: 
Udstedelses-metode: 
Intention om overdragelse: 
Nej 
Udløbsdato: 
Brugerdata: 
Brugernummer: 
956078 
Adresse: 
Prinsensvej 18 
Adresse 2: 
Sejerslev 
Postnr.: 
7900 
Bynavn: 
Nykøbing M 
Kaldesignal-kategori: 
Bestået A 
+0

如果你能告訴我們輸入數據格式是什麼樣子,那將是非常好的。告訴我們它不是HTML或JSON或其他類似的... –

+0

我已經把問題的文本文件的樣本,但它看起來像.... – OZ8HP

+1

只需搜索**「Adresse:」**而不是**「Adresse 「** ?? – Roddy

回答

4

在我看來,就好像真正的錯誤正在在您的搜索過於寬鬆。爲什麼接受部​​分匹配?這似乎更強大的尋找完全匹配

if SameText(aSearch, Infolist[Counter]) then 

或許考慮到前後空白:

if SameText(aSearch, Trim(Infolist[Counter])) then 

你需要通過'Adresse:''Adresse 2:'作爲搜索字符串,或增加搜索功能中的冒號。

如果您希望進行區域設置比較,請使用AnsiSameText。如果要區分大小寫比較等,請使用=

您可能會傳遞多個搜索字符串,並且只能在文件上循環一次。就目前而言,你讀了兩遍,看起來很浪費。確實最好在字符串列表上操作,而不是耦合到文件存儲。例如,您返回數據中的最後一個匹配項,而不是第一個匹配項。如果有多個匹配怎麼辦?你的代碼是否按預期行事?

您還應該知道,如果找不到匹配項,您的函數不會分配給Result變量,這意味着它未定義。

+0

我已經調整了你的輸入,現在我認爲它幾乎和它一樣好。我現在最大的問題是,我搜索的內容可能會出現在文件中兩次(已經在http://frekvensregister.erst.dk/Search/Result.aspx?CS=oz8hp的HTML中),這是我的下一個任務得到這個排序。 – OZ8HP