德尔菲:StringList符始终是一个空间符,甚至如果符置
-
20-09-2019 - |
题
我有麻烦分隔在TStringList类。看一看:
var
s: string;
sl: TStringList;
begin
sl := TStringList.Create;
s := 'Users^foo bar^bar foo^foobar^barfoo';
sl.Delimiter := '^';
sl.DelimitedText := s;
ShowMessage(sl[1]);
end;
sl[1]
应该回 'foo bar'
sl[1]
不返回 'foo'
它似乎符是现在 '^'
和 ' '
任何想法?
解决方案
您应该设置为s1.StrictDelimiter := True
空间不被认为是分隔符,更多信息的此处。
由于您在不支持以上(作为答案提交后澄清)版本的工作,你有两个选择:
其他提示
sl.DelimitedText := '"' + StringReplace(S, sl.Delimiter, '"' + sl.Delimiter + '"', [rfReplaceAll]) + '"';
Ryan有提供一个很好的解决这个问题使用ExtractStrings()function在Delphi。参见:
分析一字符串中使用一个分隔一TStringList,似乎也分析关于空间(Delphi)
所以在你的情况下,更换呼叫sl。分隔和sl。DelimitedText线下:ExtractStrings(['^'], [], PChar(S)、sl);
sl.Text := StringReplace(S, sl.Delimiter, sLineBreak, [rfReplaceAll]);
工作在德尔福7“像手套”对我来说。这是我的功能应用亚历山大的绝招后:
procedure Split (const Delimiter: Char; Input: string; const Strings: TStrings) ;
begin
Assert(Assigned(Strings)) ;
Strings.Clear;
Strings.Delimiter := Delimiter;
Strings.DelimitedText := '"' + StringReplace(Input, Delimiter, '"' + Delimiter + '"', [rfReplaceAll]) + '"' ;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := 'Users^foo bar^bar foo^foobar^barfoo';
Split('^',Edit1.Text,Memo1.Lines);
end;
非常感谢!
不隶属于 StackOverflow