Ich neige dazu, dies zu kümmern einen einfachen Parser verwenden. Ich habe zwei Funktionen, eine heißt NumStringParts, die die Anzahl der "Teile" in einer Zeichenfolge mit einem bestimmten Trennzeichen (in Ihrem Fall über dem Leerzeichen) zurückgibt und GetStrPart gibt den bestimmten Teil aus einer Zeichenfolge mit einem bestimmten Trennzeichen zurück. Beide Routinen wurden seit meinen Turbo Pascal Tagen in vielen Projekten eingesetzt.
function NumStringParts(SourceStr,Delimiter:String):Integer;
var
offset : integer;
curnum : integer;
begin
curnum := 1;
offset := 1;
while (offset <> 0) do
begin
Offset := Pos(Delimiter,SourceStr);
if Offset <> 0 then
begin
Inc(CurNum);
Delete(SourceStr,1,(Offset-1)+Length(Delimiter));
end;
end;
result := CurNum;
end;
function GetStringPart(SourceStr,Delimiter:String;Num:Integer):string;
var
offset : integer;
CurNum : integer;
CurPart : String;
begin
CurNum := 1;
Offset := 1;
While (CurNum <= Num) and (Offset <> 0) do
begin
Offset := Pos(Delimiter,SourceStr);
if Offset <> 0 then
begin
CurPart := Copy(SourceStr,1,Offset-1);
Delete(SourceStr,1,(Offset-1)+Length(Delimiter));
Inc(CurNum)
end
else
CurPart := SourceStr;
end;
if CurNum >= Num then
Result := CurPart
else
Result := '';
end;
Anwendungsbeispiel:
var
st : string;
f1,f2 : double;
begin
st := 'a number 12.35 and another 13.415';
ShowMessage('Total String parts = '+IntToStr(NumStringParts(st,#32)));
f1 := StrToFloatDef(GetStringPart(st,#32,3),0.0);
f2 := StrToFloatDef(GetStringPart(st,#32,6),0.0);
ShowMessage('Float 1 = '+FloatToStr(F1)+' and Float 2 = '+FloatToStr(F2));
end;
Diese Routinen arbeiten Wunder für einfache oder streng durch Komma getrennt zu Strings. Diese Routinen funktionieren wunderbar in Delphi 2009/2010.
Danke dafür. Nur was ich brauche. Beispielverwendung: ScanFormat ('Nummer 27 Zeichenfolge Hallo', 'Nummer% d Zeichenfolge% s', [@ anInt, @ aString]); Hinweis: Das Extrahieren einer Zeichenfolge funktioniert nicht, wenn das erste Zeichen, das auf die Zeichenfolge folgt, auch in der Zeichenfolge selbst enthalten ist. –