Ir al contenido


Foto

list index out of bounds (0)

error list index out of bound lazarus

  • Por favor identifícate para responder
11 respuestas en este tema

#1 soymoe

soymoe

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 23 julio 2015 - 10:55

Hola como va, hice un programa para captar los datos de una estacion meteorologica en lazarus y me tira el error list index out of bounds (0) y no se porque, me pueden ayudar?


  • 0

#2 ELKurgan

ELKurgan

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 566 mensajes
  • LocationEspaña

Escrito 23 julio 2015 - 11:13

Asi, sin ver el código ni nada, pues es un poco difícil, la verdad.

 

Ese mensaje suele aparecer cuando estás trabajando sobre algún componente descendiente de TList e intentas acceder a un índice (elemento) que no está dentro de los límites.

 

Piensa que esos componentes empiezan con el índice Cero, por lo que una lista de 10 elementos sólo puedes acceder desde el cero al nueve.

 

Saludos


  • 0

#3 soymoe

soymoe

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 24 julio 2015 - 08:07

Aca les paso el archivo para que lo revisen:
 


delphi
  1. function TForm1.DiasdesdeLanzamiento(StrHoy:string): Integer;
  2. var
  3. FechaHoy,FechaLanzamiento:TDate;
  4. begin
  5. FechaHoy:=StrToDate(StrHoy);
  6. FechaLanzamiento:=StrToDate(FechaActivacion);
  7. Result := Trunc (FechaHoy - FechaLanzamiento);
  8. end;
  9.  
  10. function TForm1.DownloadHTTP(URL, TargetFile: string): Boolean;
  11. // Download file; retry if necessary.
  12. // Could use Synapse HttpGetBinary, but that doesn't deal
  13. // with result codes (i.e. it happily downloads a 404 error document)
  14. const
  15. MaxRetries = 3;
  16. var
  17. HTTPGetResult: Boolean;
  18. HTTPSender: THTTPSend;
  19. RetryAttempt: Integer;
  20. begin
  21. Result := False;
  22. RetryAttempt := 1;
  23. HTTPSender := THTTPSend.Create;
  24. try
  25. try
  26. // Try to get the file
  27. HTTPGetResult := HTTPSender.HTTPMethod('GET', URL);
  28. while (HTTPGetResult = False) and (RetryAttempt < MaxRetries) do
  29. begin
  30. Sleep(500 * RetryAttempt);
  31. HTTPGetResult := HTTPSender.HTTPMethod('GET', URL);
  32. RetryAttempt := RetryAttempt + 1;
  33. end;
  34. // If we have an answer from the server, check if the file
  35. // was sent to us.
  36. case HTTPSender.Resultcode of
  37. 100..299:
  38. begin
  39. HTTPSender.Document.SaveToFile(TargetFile);
  40. Result := True;
  41. end; //informational, success
  42. 300..399: Result := False; // redirection. Not implemented, but could be.
  43. 400..499: Result := False; // client error; 404 not found etc
  44. 500..599: Result := False; // internal server error
  45. else Result := False; // unknown code
  46. end;
  47. except
  48. // We don't care for the reason for this error; the download failed.
  49. Result := False;
  50. end;
  51. finally
  52. HTTPSender.Free;
  53. end;
  54. end;
  55. procedure TForm1.BotonBajarClick(Sender: TObject);
  56. var
  57. Resultadoinfo,ResultadoNews,ResultadoBanner:Boolean;
  58. begin
  59. Resultadoinfo:=False;
  60. ResultadoNews:=False;
  61. ResultadoBanner:=False;
  62. MemoDatos.Lines.Clear;
  63. //MemoNews.Clear;
  64. LineaNovedades:='';
  65. //CreateDir('C:\eClima');
  66. StatusBarEstado.SimpleText:='Descargando información...';
  67. DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt,C:\eclima\realtime.txt');
  68. Resultadoinfo:=DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt,C:\eclima\realtime.txt');
  69. if(Resultadoinfo=False) then StatusBarEstado.SimpleText:='Error descargando informacion...'
  70. else
  71. begin
  72. StatusBarEstado.SimpleText:='Información descargada con exito!';
  73. LeerDatos;
  74. end;
  75. //StatusBarEstado.SimpleText:='Descargando novedades...';
  76. //DownloadHTTP('http://www.climaesperanza.com.ar/novedades.txt,C:\eclima\novedades.txt');
  77. //ResultadoNews:=DownloadHTTP('http://www.climaesperanza.com.ar/novedades.txt,C:\eclima\novedades.txt');
  78. //if(ResultadoNews=False) then StatusBarEstado.SimpleText:='Error descargando novedades...'
  79. //else
  80. // begin
  81. //StatusBarEstado.SimpleText:='Novedades descargadas con exito!';
  82. //LeerNovedades;
  83. ///MemoNews.Caption:=LineaNovedades;
  84. //end;
  85. DownloadHTTP('http://www.climaesperanza.com.ar/images/banner.gif,C:\eclima\banner.gif');
  86. ResultadoBanner:=DownloadHTTP('http://www.climaesperanza.com.ar/images/banner.gif,C:\eclima\banner.gif');
  87. if(ResultadoBanner=False) then StatusBarEstado.SimpleText:='Error descargando Banner...'
  88. else
  89. begin
  90. StatusBarEstado.SimpleText:='Descarga de Banner exitosa...';
  91. ImageBanner.Picture.LoadFromFile('C:\eclima\banner.gif');
  92. end;
  93. if ((ResultadoBanner=False)or(Resultadoinfo=False))then StatusBarEstado.SimpleText:='Error Descargando archivos...'
  94. else StatusBarEstado.SimpleText:='Descarga exitosa...';
  95. end;
  96. procedure TForm1.LeerDatos;
  97. var f : TextFile;
  98. DiasPasados:integer;
  99. begin
  100. AssignFile(f,'c:\eClima\realtime.txt');
  101. Reset(f);
  102. Readln(f, lineaDatos);
  103. Closefile(f);
  104. ExtractStrings([' '],[],PChar(lineaDatos),MemoDatos.lines);
  105. DiasPasados:=DiasdesdeLanzamiento(MemoDatos.lines[0]);
  106. if(DiasPasados<=DiasLicencia)then
  107. begin
  108. LabelFechadeDatos.Caption:=MemoDatos.lines[0];
  109. LabelHoraDatos.Caption:=MemoDatos.lines[1];
  110. LabelDatoTemp.Caption:=MemoDatos.lines[2];
  111. LabelUT.Caption:=MemoDatos.lines[14];
  112. LabelDatoHum.Caption:=MemoDatos.lines[3];
  113. LabelDatoPresion.Caption:=MemoDatos.lines[10];
  114. LabelUPresion.Caption:=MemoDatos.lines[15];
  115. LabelDatoST.Caption:=MemoDatos.lines[24];
  116. LabelUST.Caption:=MemoDatos.lines[14];
  117. LabelDatoLluvia.Caption:=MemoDatos.lines[9];
  118. LabelULluvia.Caption:=MemoDatos.lines[16];;
  119. end
  120. else
  121. begin
  122. ShowMessage('Debe descargar la version actualizada de eClima...');
  123. TimerDownload.Enabled:=False;
  124. end;
  125. end;
  126.  
  127. procedure TForm1.FormCreate(Sender: TObject);
  128. var
  129. Resultadoinfo,ResultadoNews,ResultadoBanner:Boolean;
  130. begin
  131. Resultadoinfo:=False;
  132. ResultadoNews:=False;
  133. ResultadoBanner:=False;
  134. LineaNovedades:='';
  135. CreateDir('C:\eClima');
  136. StatusBarEstado.SimpleText:='Descargando información...';
  137. DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt,C:\eclima\realtime.txt');
  138. Resultadoinfo:=DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt,C:\eclima\realtime.txt');
  139. if(Resultadoinfo=False) then StatusBarEstado.SimpleText:='Error descargando informacion...'
  140. else
  141. begin
  142. StatusBarEstado.SimpleText:='Información descargada con exito!';
  143. LeerDatos;
  144. end;
  145. //StatusBarEstado.SimpleText:='Descargando novedades...';
  146. //DownloadHTTP('http://www.climaesperanza.com.ar/novedades.txt,C:\eclima\novedades.txt');
  147. //ResultadoNews:=DownloadHTTP('http://www.climaesperanza.com.ar/novedades.txt,C:\eclima\novedades.txt');
  148. //if(ResultadoNews=False) then StatusBarEstado.SimpleText:='Error descargando novedades...'
  149. //else
  150. // begin
  151. // StatusBarEstado.SimpleText:='Novedades descargadas con exito!';
  152. //LeerNovedades;
  153. //MemoNews.Caption :=LineaNovedades;
  154. //end;
  155. DownloadHTTP('http://www.climaesperanza.com.ar/images/banner.gif,C:\eclima\banner.gif');
  156. ResultadoBanner:=DownloadHTTP('http://www.climaesperanza.com.ar/images/banner.gif,C:\eclima\banner.gif');
  157. if(ResultadoBanner=False) then StatusBarEstado.SimpleText:='Error descargando Banner...'
  158. else
  159. begin
  160. StatusBarEstado.SimpleText:='Descarga de Banner exitosa...';
  161. ImageBanner.Picture.LoadFromFile('C:\eclima\banner.gif');
  162. end;
  163. if ((ResultadoBanner=False)or(Resultadoinfo=False)) then StatusBarEstado.SimpleText:='Error Descargando archivos...'
  164. else StatusBarEstado.SimpleText:='Descarga exitosa...';
  165. end;
  166.  
  167. end.

                            


  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 julio 2015 - 08:17

Hola Soymoe he editado tu mensaje para dar formato al código y se visualice bien.

Recuerda que puedes hacerlo tu mismo siguiendo estos pasos:

1. Haz clic en el botón "código", que tiene el símbolo <>, del editor. Es el 8vo contando desde la derecha.

2. Luego selecciona en el tipo de formato de etiqueta el de Delphi (o el que aplique, según el caso)

3. Pega el código.

4. Acepta.

 

Saludos,


  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 24 julio 2015 - 08:48

Hola

 

Yo revisaría ésta parte del código,

 


php
  1. begin
  2.   LabelFechadeDatos.Caption:=MemoDatos.lines[0];
  3.   LabelHoraDatos.Caption:=MemoDatos.lines[1];
  4.   LabelDatoTemp.Caption:=MemoDatos.lines[2];
  5.   LabelUT.Caption:=MemoDatos.lines[14];
  6.   LabelDatoHum.Caption:=MemoDatos.lines[3];
  7.   LabelDatoPresion.Caption:=MemoDatos.lines[10];
  8.   LabelUPresion.Caption:=MemoDatos.lines[15];
  9.   LabelDatoST.Caption:=MemoDatos.lines[24];
  10.   LabelUST.Caption:=MemoDatos.lines[14];
  11.   LabelDatoLluvia.Caption:=MemoDatos.lines[9];
  12.   LabelULluvia.Caption:=MemoDatos.lines[16];;

Sobre todo ver si las líneas que estás intentando leer del memo existen.

 

Saludos


  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 julio 2015 - 09:09

El error que yo veo es que el memo está vacio porque el archivo descargado está vacio. De modo que intentar leer el contenido daría justamente que el índice 0 no corresponde.

En la línea:


delphi
  1. DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt,C:\eclima\realtime.txt');

se ha pasado un único string. Mientras que la función recibe 2 parámetros.

 

Debe corregirse y separarse donde termina la URL y comienza la ruta del archivo:


delphi
  1. DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt','C:\eclima\realtime.txt');

Lo extraño es que el compilador haya permitido que se pase un solo parámetro y no haya alertado de que faltan parámetros. No debiera de haber permitido la compilación después de esta línea. ^o|

 

Saludos,


  • 1

#7 soymoe

soymoe

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 24 julio 2015 - 02:09

Hola delphius, estuve mirando el codigo y esa linea no tiene ese error, puede hacer sido error de edicion del archivo para pasarlo a codigo.

Egostar esas linea la saco de la lectura del archivo y antes de leer compruebo que este el archivo. El tema es que el error no se da cada vez que lo ejecuto sino a veces.


  • 0

#8 soymoe

soymoe

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 24 julio 2015 - 02:12

les dejo un ejemplo del archivo que descargo.


  • 0

#9 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 julio 2015 - 04:29

Hola delphius, estuve mirando el codigo y esa linea no tiene ese error, puede hacer sido error de edicion del archivo para pasarlo a codigo.

Egostar esas linea la saco de la lectura del archivo y antes de leer compruebo que este el archivo. El tema es que el error no se da cada vez que lo ejecuto sino a veces.

 

El código aquí expuesto muestra que la implementación de dicho método tiene 2 parámetros, pero en la invocación o llamada se ve que se pasa 1. Si fue un error de copy & paste no sabría decirlo. Sólo me limito a decir lo que vemos acá. Y es eso justamente: Se ve 'algo1,algo2' cuando debiera ser 'algo1', 'algo'.

 

Si dices que el error se presenta en algunas veces quizá sea que el archivo no se ha logrado descargar apropidamente.

Comprueba antes de pasar los datos que efectivamente el archivo no esté vacio, y/o que el contenido sea congruente con todo lo esperado (por ejemplo, verificar la longitud del archivo si siempre es fija y conocida, o intentar leer el "campo" que representa el último dato). La lógica indica que el archivo está vacio.

 

No veo que hayas adjuntando un archivo de muestra.

 

Saludos,


  • 0

#10 soymoe

soymoe

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 25 julio 2015 - 06:40

Gracias por responder, voy a ver si compruebo la longuitud del archivo antes de usarlo,gracias


  • 0

#11 soymoe

soymoe

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 25 julio 2015 - 03:13

Hola, compañeros, he cambiado el programa, cada vez que cargo los datos en el tmemo, lo lo borro sino lo reemplazo por las lineas de otro vacio, asi me aseguro de que el tmemo sea simpre como en el principio, ademas compruebo que la cantidad de lineas sea de 48, pero el error sigue.


  • 0

#12 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 25 julio 2015 - 03:35

Hola, compañeros, he cambiado el programa, cada vez que cargo los datos en el tmemo, lo lo borro sino lo reemplazo por las lineas de otro vacio, asi me aseguro de que el tmemo sea simpre como en el principio, ademas compruebo que la cantidad de lineas sea de 48, pero el error sigue.

 

¿Podrías ponernos todo el código exacto? En algún lado algo está fallando. Va a ser necesario que nos brindes más detalles porque no vemos todo lo que tienes hecho.

También nos sería útil que describas que es cada valor o como se supone que debe interpretarse el contenido del archivo.

 

El contenido del archivo, si uno accede a la URL, tiene algo como esto:


delphi
  1. 25/07/15 18:32:25 17.5 69 11.8 6.1 9.7 45 0.0 0.0 1009.3 NE 2 km/h C hPa mm 90.3 -0.1 0.0 0.0 0.0 22.2 53 17.5 -1.2 21.4 15:19 5.6 05:47 17.3 13:52 23.4 14:04 1014.1 10:55 1009.2 18:20 1.9.4 1099 9.7 17.5 19.6 0 0.00 0 45 0.0 18 1 0 NE 715 m 16.9 0.0 0 0

Saber interpretar cada cosa ayudaría a saber donde puede estar la falla.

 

Saludos,


  • 0





Etiquetado también con una o más de estas palabras: error list index out of bound, lazarus

IP.Board spam blocked by CleanTalk.