Delphi:即使设置了分隔符,StringList分隔符也始终是空格字符
我遇到了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'
看来分隔符现在是'^'
AND ' '
有任何想法吗?
你应该设置s1.StrictDelimiter := True
的空间不被视为分隔符,更多信息在这里 。
由于您的版本不支持上述版本(答案提交后已澄清),因此您有两种select:
- find一个你知道不会在原文中使用的字符(例如下划线),在分割之前将所有空格转换为该字符,并在分割之后转换回来。 这是robosoft的build议。
- 如果在文本中没有引号和空格,你可以使用Alexander的诀窍,并用反命令在分隔符之间包裹文本,这样
'hello hello^bye bye'
变成'"hello hello"^"bye bye"'
。 如果你确实select了这个方法,并且适合你,请接受亚历山大的答案,而不是我的,他也提供了实现它的代码。
两种不使用StrictDelimiter
解决方法都具有局限性:第一个需要一些未使用的字符,第二个需要原始文本中没有引号和空格。
也许是时候升级到更新版本的Delphi了:)
sl.DelimitedText := '"' + StringReplace(S, sl.Delimiter, '"' + sl.Delimiter + '"', [rfReplaceAll]) + '"';
Ryan使用Delphi中的ExtractStrings()函数提供了一个很好的解决scheme。 看到:
使用分隔符parsingstring到TStringList似乎也parsing空格(delphi)
所以在你的情况下,用下面的行代替调用slDelimiter和sl.DelimitedText: ExtractStrings(['^'],[],PChar(S),sl);
sl.Text := StringReplace(S, sl.Delimiter, sLineBreak, [rfReplaceAll]);
delphi7的工作“像手套”对我来说。 这是我应用亚历山大的魔术后的function:
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;
非常感谢!