![]() |
eliminar lineas de un txt.
buenos dias amigos del foro, estoy trabajando con una coletora de datos que genera un txt, el problema esta que el archivo tiene lineas en blanco y cuando lo estoy leyendo para insertarlo en la BD me presenta un error, la pregunta es como hago para eliminar las lineas en blanco del txt. Gracias.
|
Saludos!
¿Como estás leyendo el archivo?, te lo pregunto porque podrías probar a utilizar la clase "TStringList" para leer el archivo a través del método "LoadFromFile" y, una vez leído, crear un bucle que recorra cada elemento y elimine las líneas en blanco, ejemplo:
(Claro que todo dependerá de como sea la estructura del archivo .txt) Chao! |
Gracias por responder jmariano, el txt lo leo de esta manera:
Code: ______________________________________________________________ Archivo.LoadFromFile('C:INVENTARIO.txt'); for I := 0 to Archivo.Count -1 do begin Campos.Clear; Campos.CommaText:= Archivo[i]; Codigo:= Campos[0]; end; ______________________________________________________ |
Ok, entonces prueba simplemente:
Es, básicamente, lo mismo que te comenté pero ignorando las líneas en blanco. |
Gracias por responder, pero no funciona???
|
|
Gracias por responder roman, pero me da error: incompatible string and boolean ?
|
ya logre correr el trim, pero igual me da error al leer por la linea en blanco
|
Prueba con:
Saludos... |
Cita:
// Saludos |
Si aplicando la solución de maeyanes te sigue dando error, entonces, comprueba que la línea en blanco no sea una línea de tipo: ,,,,,,,,, (es decir, donde no hubo registros o si todos fueron valores nulos que no haya una línea con solo el delimitador de campo, en este caso ",").
|
Disculpen por no decir el error: EstringListError 'List index out of bounds (0)',
Nose como corregirlo. |
Hola,
Estoy con roman. Sobre la instrucción: ... pulsa la tecla "F5", esto es, crea un "punto de ruptura" para que el programa se detenga en ese punto al ejecutarse: eso te dará pie a averiguar (simplemente poniendo el cursor sobre la variable que precises) qué contienen las líneas del archivo, y así hacerte idea de qué está pasando y, en todo caso, qué puedes hacer para solucionar el problema. |
Está claro que el error debe de estar en la variable "Campos" que no tiene elementos. Prueba lo siguiente:
|
Hola,
Esto probablemente ocurra por andar averiguando (*) el error... lo digo porque mi anterior mensaje iba destinado a la solución de otro error y no el que mencionas. ¡Pero también puede servirte! Puedes averiguar el valor de la variable contador a cada paso por el bucle, y ver también qué está pasando en el mismo. En todo caso, creo que lo mejor sería que copiaras aquí el código al completo del bucle que te está dando problemas: probablemente a partir de éste alguien sabrá darte una solución al problema en cuestión. (*) Otrosí, nadie me obligaba a hacer de adivino. |
Gracias a todos por responder pero e intentado todo lo que me recomendaron y sigue dandome el mismo error. Que hago
|
Pon un ejemplo de los datos. Siempre con este tipo de programas se debe postear Codigo + Estructura datos + Datos ejemplo
|
Gracias por responder el codigo es el siguiente;
Code: __________________________________________________________ procedure TInventarios.Button2Click(Sender: TObject); vAR Archivo,Campos: TStringList; I, J: Integer; Codigo: string; Cant : real; Linea : Integer; begin Archivo:= TStringList.Create; Campos:= TStringList.Create; try Archivo.LoadFromFile('C:\INVENTARIO.txt'); for I := 0 to Archivo.Count -1 do begin Campos.Clear; Campos.CommaText:= Archivo[i]; Codigo:= Campos[0]; Cant:= Strtofloat(Campos[1]); If (Codigo <> '') and (Cant > 0) then begin Linea:= Linea + 1; DataModule1.STOMOV.Insert; DataModule1.STOMOV.Fields[1].Value := 1; DataModule1.STOMOV.Fields[3].Value := Linea; DataModule1.STOMOV.Fields[4].Text := DateToStr(Now); DataModule1.STOMOV.Fields[5].Value := 530; DataModule1.STOMOV.Fields[7].Value := strToInt(Edit4.text); DataModule1.STOMOV.Fields[8].Text := Codigo; DataModule1.STOMOV.Fields[9].Value := Cant; DataModule1.STOMOV.Post; end; end; finally Archivo.Free; Campos.Free; end; ________________________________________________________________ Y el txt tine esta forma: _______________________________________ 802404041500080,1800, , , 802404041500080,1800, _______________________________________ Que puedo hacer? |
¿Y dónde están las condiciones de las que hemos estado hablando en todo el hilo?
Asignas Campos[0] a Codigo sin antes haber checado nada de lo que comentamos. Tanto en líneas en blanco como en líneas con sola comas, esa asignación te va a dar el error descrito. // Saludos |
Roman, las e probado una a una, este es el codigo original.
|
Prueba los siguiente (a ver si hay suerte)
(Como verás, he respetado tu código original añadiéndole sólo unas sentencias) Chao! |
Amigos nose que mas intentar. pero no encuentro la solucion.
|
Haz un trazado de la aplicación y dinos exactamente qué contiene la línea del archivo en donde te lanza el error.
// Saludos |
¿Probaste el código que especifiqué mas arriba? ¿Que error te dió?.
|
Roman, el archivo lo genera una pistota de codigos de barra cuando el operador presiona enter en la pistola se genera una lina en blanco en el archivo, esa linea contienedos comas ,,
y el error que me da es cuando le asigno un string vacio a una variable real; Code: _________________________________ Cant:= Strtofloat(Campos[1]); _________________________________ Esto ocurre porque nose como saltar la linea un blanco, bueno tiene dos espacios un blancos separados por dos coma. |
Entonces, te valdría con sólo probar que "Campos[1]" no esté vacio antes de asignar el valor
|
si jmariano lo probe pero no detiene la linea en blanco,
code: _______________________________________________ if Campos.Count >= 2 then begin Codigo:= Campos[0]; Cant:= Strtofloat(Campos[1]); end; _____________________________________________________ el detalle es que campo se es igual a dos por lo siguiente, es como le espleque a roman, la linea en blanco esta formada por dos espacios en blancos que son los dos campos que captura la lectora perop estos estan separados por comas, entonces campos es igial a dos porque esta formado por dos string en blanco. |
Sip, ya me di cuenta jeje! (se ve que posteamos casi al mismo tiempo). Pero fíjate en la sentencia que puse antes de tu mensaje (la sentencia "if")
(Eso sí, siempre reinicia las variables "Codigo" y "Cant" por cada línea que leas del archivo) |
Gracias jmariano y a todos por el interes en ayudarme, ya resolvi el pequeño problema. Hay momentos en que uno esta mentalmente agotado y la solucion estan sencilla que no la ves. Gracias
haa la solucion fue esta; Code: __________________________________________ Cant := 0; Campos.Clear; Campos.CommaText:= Archivo[i]; if (Campos[0] <> '') and (Campos[1] <> '') then begin Codigo:= Campos[0]; Cant:= Strtofloat(Campos[1]); end; ____________________________________________ |
| La franja horaria es GMT +2. Ahora son las 16:39:27. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi