2 votes

Convertir une chaîne de caractères inhabituelle en valeur entière dans Delphi

J'ai un tableau de chaînes de caractères contenant des nombres entiers. J'ai besoin de les convertir en nombres entiers lorsque cela est possible.

Par conséquent, j'aime bien :

if not TryStrToInt ( grid.Cells[columnIndex, i], integerValue ) then begin
  errorsCount := errorsCount + 1;
  errMemo.Lines.Add ( 'Column  "' + fstColumn.Name + '" Line ' + IntTostr ( i ) + ' Value "' + grid.Cells[columnIndex, i] + '" must be integer.' );
end
else begin
   {deal with integerValue}
end;

Mais quand TryStrToInt face à un nombre comme '10.0', '11.00' etc, qui est en fait un Integer, il renvoie false qui produit une erreur. TryStrToInt dans SysUtils.pas implémenté comme :

function TryStrToInt(const S: string; out Value: Integer): Boolean;
var
  E: Integer;
begin
  Val(S, Value, E);
  Result := E = 0;
end;

Comme toute autre conversion de chaîne de caractères, elle utilise Val .

Je ne vois qu'une seule mauvaise solution : essayer de convertir une chaîne de caractères en un nombre flottant, puis, en cas de succès, convertir ce nombre en un nombre entier. Mais cela semble laid. Existe-t-il une autre méthode standard ? Peut-être que je n'utilise pas Val.

UPD : J'utilise Delphi XE5.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X