如何从分隔文本中获取特定字段

时间:2011-10-05 08:36:49

标签: string delphi

我有一串分隔的文字,即: 值1:值2:值3:值4:值5:Value6

我如何提取,例如,一个特定的值,即: Label.caption := GetValuefromDelimitedText(2);获取Value2

提前致谢

3 个答案:

答案 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);

这可能非常有用恕我直言。