2014-06-13 152 views
4

我是具有由分隔符分割的字符串的函數:Delphi的換行符

function ExtractURL(url: string; pattern: string; delimiter: char): string; 
var 
    indexMet, i: integer; 
    urlSplit: TArray<String>; 
    delimiterSet: array [0 .. 0] of char; 
begin 
    delimiterSet[0] := delimiter; 
    urlSplit := url.Split(delimiterSet); 
    Result := ''; 

    for i := 0 to Length(urlSplit) - 1 do 
    begin 
    if urlSplit[i].Contains(pattern) then 
    begin 
     indexMet := urlSplit[i].LastIndexOf('=') + 1; // extracts pairs key=value 
     Result := urlSplit[i].Substring(indexMet); 
     Exit; 
    end; 
    end; 
end; 

的功能時,分隔符是一個單獨的字符正常工作('&」,‘|’)。我怎樣才能將換行符作爲分隔符。我嘗試了#13#10,#13#10,sLineBreak,Chr(13)+ Chr(10),但他們不工作。

+1

定界符變量聲明爲「Char」。如果您需要多個分隔符,請將分隔符聲明爲字符串。 –

+0

刪除換行符,然後提取回車符。 –

+1

爲什麼不使用TStringList?這將已經拆分sLineBreak上的字符串。看看這裏:http://stackoverflow.com/questions/15424293/how-to-split-string-by-a-multi-character-delimiter/15427587#15427587 –

回答

1

@TLama對這個問題的第一評論解決了我的問題。我重寫了該函數:

function ExtractURL(url: string; pattern: string; delimiter: string): string; 
var 
    indexMet, i: integer; 
    urlSplit: TStringDynArray; 
begin 
    // note that the delimiter is a string, not a char 
    urlSplit := System.StrUtils.SplitString(url, delimiter); 
    result := ''; 

    for i := 0 to Length(urlSplit) - 1 do 
    begin 
    if urlSplit[i].Contains(pattern) then 
    begin 
     indexMet := urlSplit[i].LastIndexOf('=') + 1; 
     result := urlSplit[i].Substring(indexMet); 
     Exit; 
    end; 
    end; 
end; 
+2

你可以['縮短](http://pastebin.com/ruxqFmDN)。附:對不起,但我已經刪除了我的評論,因爲我意識到'SplitString'不是你正在尋找的。字符串助手的「Split」有一個重載,它接受一個字符串分隔符。 – TLama

+0

@TLama謝謝你的支持 –