Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   eliminar lineas de un txt. (https://www.clubdelphi.com/foros/showthread.php?t=24345)

danytorres 17-08-2005 16:37:11

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.

jmariano 17-08-2005 17:10:04

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!

danytorres 17-08-2005 17:16:47

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;
______________________________________________________

jmariano 17-08-2005 17:22:56

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.

danytorres 17-08-2005 17:24:45

Gracias por responder, pero no funciona???

roman 17-08-2005 17:34:00

¿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

danytorres 17-08-2005 18:02:00

Gracias por responder roman, pero me da error: incompatible string and boolean ?

danytorres 17-08-2005 18:09:14

ya logre correr el trim, pero igual me da error al leer por la linea en blanco

maeyanes 17-08-2005 18:11:51

Prueba con:
Código Delphi [-]
if Pos(',', Archivo[i]) > 0 then
begin
  Campos.CommaText:= Archivo[i];
  //...


Saludos...

roman 17-08-2005 18:21:46

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

jmariano 17-08-2005 18:24:20

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 ",").

danytorres 17-08-2005 18:40:58

Disculpen por no decir el error: EstringListError 'List index out of bounds (0)',

Nose como corregirlo.

dec 17-08-2005 18:43:32

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.

jmariano 17-08-2005 18:44:44

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];
    ...

dec 17-08-2005 18:47:20

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.

danytorres 18-08-2005 16:20:17

Gracias a todos por responder pero e intentado todo lo que me recomendaron y sigue dandome el mismo error. Que hago

mamcx 18-08-2005 16:41:40

Pon un ejemplo de los datos. Siempre con este tipo de programas se debe postear Codigo + Estructura datos + Datos ejemplo

danytorres 18-08-2005 17:08:30

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?

roman 18-08-2005 17:14:47

¿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

danytorres 18-08-2005 17:29:29

Roman, las e probado una a una, este es el codigo original.


La franja horaria es GMT +2. Ahora son las 11:18:01.

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