Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Se salta el número 10, el 20 y el 21... (https://www.clubdelphi.com/foros/showthread.php?t=95684)

bulc 10-05-2022 22:19:24

Se salta el número 10, el 20 y el 21...
 
Quiero hacer un listado de número sucesivos de dos dígitos (no Integers) hasta el 24 y este modo se salta el 10, el 20 y el 21...
Y no entiendo por qué. No encuentro el error. A ver si alguien me puede ayudar. Gracias.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var
   Sub: String[2];   S : String ;  I: Integer;
begin
Edit1.Clear;
S := ''; Sub := '' ;
for I := 1 to 24 do
begin
    IF I <= 9  then Sub := Format('%.*d', [2,I]) ELSE Sub := InttoStr( I );
    if  POS(Sub, S) = 0 then INSERT( Sub, S, Length(S)+1 ) ;
     //ShowMessage(' FALTAN EL 10, 20 Y EL 21 POR el morro');
end;
Edit1.Text := S ;
end;

lupinfree 10-05-2022 23:31:31

Hola, fijate que: Cuando I= 10 pos vale 2, cuando I=20 pos vale 4 y cuando I=21 pos vale 21.
No le veo la utilidad del If Pos.... yo haria solamente

Código Delphi [-]
S := S + Sub;

y listo el pollo, quedando la cadena
010203040506070809101112131415161718192021222324.

para que veas cuando tenes la cadena completa en el segundo termino esta el 10. Y Pos te toma ese lugar.
y asi con el 20 y 21 . Marqué con rojo las posiciones que ve.

bulc 11-05-2022 09:29:25

Muchas gracias por tu ayuda
 
Lo tengo en cuenta y lo corrijo.
Saludos.
bulc

Neftali [Germán.Estévez] 11-05-2022 10:00:04

Cita:

Empezado por bulc (Mensaje 546812)
Quiero hacer un listado de número sucesivos de dos dígitos (no Integers) hasta el 24 y este modo se salta el 10, el 20 y el 21...

Sólo como sugerencia y para simplificar el código (ya lo tienes solucionado).
El propio Format te permite formatear los números a 2 posiciones sólo en caso de que sea necesario, así que puedes evitar el IF.

Puedes conseguir lo mismo con un código más simple similar a este:

Código Delphi [-]
var
  s:String;
begin
  for var I:integer := 1 to 24 do
    s := s + Format('%.2d', [i]);
  edit1.Text := s;


La franja horaria es GMT +2. Ahora son las 23:33:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi