Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-08-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Question 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.
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #2  
Antiguo 17-08-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
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:

Código Delphi [-]
var
  I: Integer;
begin
  with TStringList.Create do
  begin
    LoadFromFile('Prueba.txt');

    for I := 0 to Count - 1 do
      if Strings[i] = '' then
        Delete(I);

    Free;
  end;
end;

(Claro que todo dependerá de como sea la estructura del archivo .txt)

Chao!
Responder Con Cita
  #3  
Antiguo 17-08-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
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;
______________________________________________________
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #4  
Antiguo 17-08-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Ok, entonces prueba simplemente:

Código Delphi [-]
  Archivo.LoadFromFile('C:INVENTARIO.txt');

  for I := 0 to Archivo.Count -1 do
  begin
    Campos.Clear;
    
    if Archivo[i] <> '' then
    begin
      Campos.CommaText:= Archivo[i];
      Codigo:= Campos[0];
    end; 
  end;

Es, básicamente, lo mismo que te comenté pero ignorando las líneas en blanco.
Responder Con Cita
  #5  
Antiguo 17-08-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Gracias por responder, pero no funciona???
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #6  
Antiguo 17-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿No será que las líneas en blanco no están tan blancas? En lugar de poner

Código Delphi [-]
if Archivo[i] <> '' then

intenta con

Código Delphi [-]
if Trim(Archivo[i]) <> '' then

// Saludos
Responder Con Cita
  #7  
Antiguo 17-08-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Gracias por responder roman, pero me da error: incompatible string and boolean ?
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #8  
Antiguo 17-08-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
ya logre correr el trim, pero igual me da error al leer por la linea en blanco
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #9  
Antiguo 17-08-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Prueba con:
Código Delphi [-]
if Pos(',', Archivo[i]) > 0 then
begin
  Campos.CommaText:= Archivo[i];
  //...


Saludos...
Responder Con Cita
  #10  
Antiguo 17-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por danytorres
ya logre correr el trim, pero igual me da error al leer por la linea en blanco
Entonces creo que el archivo txt te está dando otros problemas además de las líneas en blanco. Haz un debug para ver qué contiene la línea del archivo cuando te marca error. Por cierto que hasta ahora no nos has dicho cuál es ese error.

// Saludos
Responder Con Cita
  #11  
Antiguo 17-08-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
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 ",").
Responder Con Cita
  #12  
Antiguo 17-08-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Disculpen por no decir el error: EstringListError 'List index out of bounds (0)',

Nose como corregirlo.
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #13  
Antiguo 17-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Estoy con roman. Sobre la instrucción:

Código Delphi [-]
 Strings[i] = ''
... 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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #14  
Antiguo 17-08-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Está claro que el error debe de estar en la variable "Campos" que no tiene elementos. Prueba lo siguiente:

Código Delphi [-]
    ... 
    Campos.CommaText:= Archivo[i];
 
    if Campos.Count > 0 then
      Codigo:= Campos[0];
    ...

Última edición por jmariano fecha: 17-08-2005 a las 18:47:32.
Responder Con Cita
  #15  
Antiguo 17-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 17-08-2005 a las 18:48:35. Razón: (corrección del texto)
Responder Con Cita
  #16  
Antiguo 18-08-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Question

Gracias a todos por responder pero e intentado todo lo que me recomendaron y sigue dandome el mismo error. Que hago
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #17  
Antiguo 18-08-2005
Avatar de mamcx
mamcx mamcx is online now
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Pon un ejemplo de los datos. Siempre con este tipo de programas se debe postear Codigo + Estructura datos + Datos ejemplo
__________________
El malabarista.
Responder Con Cita
  #18  
Antiguo 18-08-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
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?
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #19  
Antiguo 18-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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
Responder Con Cita
  #20  
Antiguo 18-08-2005
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 22
danytorres Va por buen camino
Roman, las e probado una a una, este es el codigo original.
__________________
____________________________
Un saludo a todos...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:35:49.


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
Copyright 1996-2007 Club Delphi