J'ont tendance à prendre soin de cela en utilisant un analyseur simple. J'ai deux fonctions, on est appelé NumStringParts qui renvoie le nombre de « parties » dans une chaîne avec un séparateur spécifique (dans votre cas au-dessus de l'espace) et GetStrPart renvoie la partie spécifique d'une chaîne avec un séparateur spécifique. Ces deux routines ont été utilisées depuis mes jours Turbo Pascal dans de nombreux projets.
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;
Exemple d'utilisation:
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;
Ces routines pour faire des miracles par des virgules simples ou strictes chaînes délimitées aussi. Ces routines fonctionnent à merveille dans Delphi 2009/2010.
Merci pour cela. Juste ce que j'ai besoin. Exemple d'utilisation: ScanFormat ('numéro 27 Bonjour chaîne', 'numéro% d% s string', [@ anInt, @ aString]); Remarque: L'extraction d'une chaîne ne fonctionnera pas si le premier caractère qui suit la chaîne est également contenu dans la chaîne elle-même. –