我有一串分隔的文字,即: 值1:值2:值3:值4:值5:Value6
我如何提取,例如,一个特定的值,即:
Label.caption := GetValuefromDelimitedText(2);
获取Value2
提前致谢
保
答案 0 :(得分:6)
类似的东西 - 如果你喜欢紧凑的代码(但不像Davids那样高效):
function GetValueFromDelimitedText(const s: string; Separator: char; Index: Integer): string;
var sl : TStringList;
begin
Result := '';
sl := TStringList.Create;
try
sl.Delimiter := Separator;
sl.DelimitedText := s;
if sl.Count > index then
Result := sl[index];
finally
sl.Free;
end;
end;
希望有所帮助
答案 1 :(得分:3)
这应该这样做:
function GetValueFromDelimitedText(
const s: string;
const Separator: char;
const Index: Integer
): string;
var
i, ItemIndex, Start: Integer;
begin
ItemIndex := 1;
Start := 1;
for i := 1 to Length(s) do begin
if s[i]=Separator then begin
if ItemIndex=Index then begin
Result := Copy(s, Start, i-Start);
exit;
end;
inc(ItemIndex);
Start := i+1;
end;
end;
if ItemIndex=Index then begin
Result := Copy(s, Start, Length(s)-Start+1);
end else begin
Result := '';
end;
end;
此版本允许您指定分隔符,您显然会传递':'
。如果您要求超出结束的项目,则该函数将返回空字符串。如果您愿意,可以将其更改为例外。最后,我已经安排根据你的例子使用基于1的索引,但我个人会选择基于0的索引。
答案 2 :(得分:2)
如果使用Delphi XE或更高版本,您也可以使用StrUtils.SplitString
,如下所示:
function GetValueFromDelimitedText (const Str: string; Separator: Char; Index: Integer) : string;
begin
Result := SplitString (Str, Separator) [Index];
end;
在生产代码中,您应该检查Index
确实是一个有效的索引。
此方法返回TStringDynArray
(动态字符串数组),因此您也可以像这样使用它(使用枚举器):
for Str in SplitString (Str, Separator) do
Writeln (Str);
这可能非常有用恕我直言。