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?
![Foto](http://www.gravatar.com/avatar/005a9d20a396f61e5388bb73080505fd?s=100&d=http%3A%2F%2Fdelphiaccess.com%2Fforos%2Fpublic%2Fstyle_images%2Fmaster%2Fprofile%2Fdefault_large.png)
list index out of bounds (0)
#1
Escrito 23 julio 2015 - 10:55
#2
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
#3
Escrito 24 julio 2015 - 08:07
Aca les paso el archivo para que lo revisen:
function TForm1.DiasdesdeLanzamiento(StrHoy:string): Integer; var FechaHoy,FechaLanzamiento:TDate; begin FechaHoy:=StrToDate(StrHoy); FechaLanzamiento:=StrToDate(FechaActivacion); Result := Trunc (FechaHoy - FechaLanzamiento); end; function TForm1.DownloadHTTP(URL, TargetFile: string): Boolean; // Download file; retry if necessary. // Could use Synapse HttpGetBinary, but that doesn't deal // with result codes (i.e. it happily downloads a 404 error document) const MaxRetries = 3; var HTTPGetResult: Boolean; HTTPSender: THTTPSend; RetryAttempt: Integer; begin Result := False; RetryAttempt := 1; HTTPSender := THTTPSend.Create; try try // Try to get the file HTTPGetResult := HTTPSender.HTTPMethod('GET', URL); while (HTTPGetResult = False) and (RetryAttempt < MaxRetries) do begin Sleep(500 * RetryAttempt); HTTPGetResult := HTTPSender.HTTPMethod('GET', URL); RetryAttempt := RetryAttempt + 1; end; // If we have an answer from the server, check if the file // was sent to us. case HTTPSender.Resultcode of 100..299: begin HTTPSender.Document.SaveToFile(TargetFile); Result := True; end; //informational, success 300..399: Result := False; // redirection. Not implemented, but could be. 400..499: Result := False; // client error; 404 not found etc 500..599: Result := False; // internal server error else Result := False; // unknown code end; except // We don't care for the reason for this error; the download failed. Result := False; end; finally HTTPSender.Free; end; end; procedure TForm1.BotonBajarClick(Sender: TObject); var Resultadoinfo,ResultadoNews,ResultadoBanner:Boolean; begin Resultadoinfo:=False; ResultadoNews:=False; ResultadoBanner:=False; MemoDatos.Lines.Clear; //MemoNews.Clear; LineaNovedades:=''; //CreateDir('C:\eClima'); StatusBarEstado.SimpleText:='Descargando información...'; DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt,C:\eclima\realtime.txt'); Resultadoinfo:=DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt,C:\eclima\realtime.txt'); if(Resultadoinfo=False) then StatusBarEstado.SimpleText:='Error descargando informacion...' else begin StatusBarEstado.SimpleText:='Información descargada con exito!'; LeerDatos; end; //StatusBarEstado.SimpleText:='Descargando novedades...'; //DownloadHTTP('http://www.climaesperanza.com.ar/novedades.txt,C:\eclima\novedades.txt'); //ResultadoNews:=DownloadHTTP('http://www.climaesperanza.com.ar/novedades.txt,C:\eclima\novedades.txt'); //if(ResultadoNews=False) then StatusBarEstado.SimpleText:='Error descargando novedades...' //else // begin //StatusBarEstado.SimpleText:='Novedades descargadas con exito!'; //LeerNovedades; ///MemoNews.Caption:=LineaNovedades; //end; DownloadHTTP('http://www.climaesperanza.com.ar/images/banner.gif,C:\eclima\banner.gif'); ResultadoBanner:=DownloadHTTP('http://www.climaesperanza.com.ar/images/banner.gif,C:\eclima\banner.gif'); if(ResultadoBanner=False) then StatusBarEstado.SimpleText:='Error descargando Banner...' else begin StatusBarEstado.SimpleText:='Descarga de Banner exitosa...'; ImageBanner.Picture.LoadFromFile('C:\eclima\banner.gif'); end; if ((ResultadoBanner=False)or(Resultadoinfo=False))then StatusBarEstado.SimpleText:='Error Descargando archivos...' else StatusBarEstado.SimpleText:='Descarga exitosa...'; end; procedure TForm1.LeerDatos; var f : TextFile; DiasPasados:integer; begin AssignFile(f,'c:\eClima\realtime.txt'); Reset(f); Readln(f, lineaDatos); Closefile(f); ExtractStrings([' '],[],PChar(lineaDatos),MemoDatos.lines); DiasPasados:=DiasdesdeLanzamiento(MemoDatos.lines[0]); if(DiasPasados<=DiasLicencia)then begin LabelFechadeDatos.Caption:=MemoDatos.lines[0]; LabelHoraDatos.Caption:=MemoDatos.lines[1]; LabelDatoTemp.Caption:=MemoDatos.lines[2]; LabelUT.Caption:=MemoDatos.lines[14]; LabelDatoHum.Caption:=MemoDatos.lines[3]; LabelDatoPresion.Caption:=MemoDatos.lines[10]; LabelUPresion.Caption:=MemoDatos.lines[15]; LabelDatoST.Caption:=MemoDatos.lines[24]; LabelUST.Caption:=MemoDatos.lines[14]; LabelDatoLluvia.Caption:=MemoDatos.lines[9]; LabelULluvia.Caption:=MemoDatos.lines[16];; end else begin ShowMessage('Debe descargar la version actualizada de eClima...'); TimerDownload.Enabled:=False; end; end; procedure TForm1.FormCreate(Sender: TObject); var Resultadoinfo,ResultadoNews,ResultadoBanner:Boolean; begin Resultadoinfo:=False; ResultadoNews:=False; ResultadoBanner:=False; LineaNovedades:=''; CreateDir('C:\eClima'); StatusBarEstado.SimpleText:='Descargando información...'; DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt,C:\eclima\realtime.txt'); Resultadoinfo:=DownloadHTTP('http://www.climaesperanza.com.ar/realtime.txt,C:\eclima\realtime.txt'); if(Resultadoinfo=False) then StatusBarEstado.SimpleText:='Error descargando informacion...' else begin StatusBarEstado.SimpleText:='Información descargada con exito!'; LeerDatos; end; //StatusBarEstado.SimpleText:='Descargando novedades...'; //DownloadHTTP('http://www.climaesperanza.com.ar/novedades.txt,C:\eclima\novedades.txt'); //ResultadoNews:=DownloadHTTP('http://www.climaesperanza.com.ar/novedades.txt,C:\eclima\novedades.txt'); //if(ResultadoNews=False) then StatusBarEstado.SimpleText:='Error descargando novedades...' //else // begin // StatusBarEstado.SimpleText:='Novedades descargadas con exito!'; //LeerNovedades; //MemoNews.Caption :=LineaNovedades; //end; DownloadHTTP('http://www.climaesperanza.com.ar/images/banner.gif,C:\eclima\banner.gif'); ResultadoBanner:=DownloadHTTP('http://www.climaesperanza.com.ar/images/banner.gif,C:\eclima\banner.gif'); if(ResultadoBanner=False) then StatusBarEstado.SimpleText:='Error descargando Banner...' else begin StatusBarEstado.SimpleText:='Descarga de Banner exitosa...'; ImageBanner.Picture.LoadFromFile('C:\eclima\banner.gif'); end; if ((ResultadoBanner=False)or(Resultadoinfo=False)) then StatusBarEstado.SimpleText:='Error Descargando archivos...' else StatusBarEstado.SimpleText:='Descarga exitosa...'; end; end.
#4
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,
#5
Escrito 24 julio 2015 - 08:48
Hola
Yo revisaría ésta parte del código,
begin LabelFechadeDatos.Caption:=MemoDatos.lines[0]; LabelHoraDatos.Caption:=MemoDatos.lines[1]; LabelDatoTemp.Caption:=MemoDatos.lines[2]; LabelUT.Caption:=MemoDatos.lines[14]; LabelDatoHum.Caption:=MemoDatos.lines[3]; LabelDatoPresion.Caption:=MemoDatos.lines[10]; LabelUPresion.Caption:=MemoDatos.lines[15]; LabelDatoST.Caption:=MemoDatos.lines[24]; LabelUST.Caption:=MemoDatos.lines[14]; LabelDatoLluvia.Caption:=MemoDatos.lines[9]; LabelULluvia.Caption:=MemoDatos.lines[16];;
Sobre todo ver si las líneas que estás intentando leer del memo existen.
Saludos
#6
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:
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:
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.
Saludos,
#7
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.
#8
Escrito 24 julio 2015 - 02:12
les dejo un ejemplo del archivo que descargo.
#9
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,
#10
Escrito 25 julio 2015 - 06:40
Gracias por responder, voy a ver si compruebo la longuitud del archivo antes de usarlo,gracias
#11
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.
#12
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:
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,
Etiquetado también con una o más de estas palabras: error list index out of bound, lazarus
COMUNIDAD →
Noticias →
Delphi Data Access Components: Updated Versions with Lazarus 3.0, FireBird 5 support, and MoreComenzado por JordanS , 01 abr 2024 ![]() |
|
![]()
|
||
PROGRAMACIÓN →
Delphi →
Aplicaciones de Internet Enriquecidas (RIA) →
Atajos de tecladoComenzado por marypepo , 10 jul 2023 ![]() |
|
![]()
|
||
COMUNIDAD →
Noticias →
A huge update of Delphi DAC with RAD Studio 11.1 Alexandria, Lazarus 2.2.0, macOS Monterey, and Windows 11 supportComenzado por JordanS , 18 abr 2022 ![]() |
|
![]()
|
||
PROGRAMACIÓN →
Delphi →
Help =( Pilas y ColasComenzado por Nelsonguzmans , 22 jun 2019 ![]() |
|
![]()
|
||
PROGRAMACIÓN →
Lazarus / FreePascal →
Lazarus Release 2.0.2Comenzado por jdepaz , 01 may 2019 ![]() |
|
![]()
|