Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Problemita en Procesamiento de Archivo de Texto (https://www.clubdelphi.com/foros/showthread.php?t=70886)

rogeliogamberro 17-11-2010 15:41:16

Problemita en Procesamiento de Archivo de Texto
 
Hola a todos!

Tengo que hacerles una consulta sencilla sobre el procesamiento de archivos de texto. Estoy utilizando las funciones fopen, fscanf y fgets. Basicamente debo ir cargando en un bucle for una tabla como la siguente:

----------------------------------------------
I010065478
Juan Perez
Brown 123
Buenos Aires
(0231) 12345
pepe@mail.com
45
14

I010065987
Juan Lopez
White 197
Buenos Aires
(0231) 567940
pancho@mail.com


67
----------------------------------------------

Mis dudas son las siguientes:

1) Para levantar un Nombre (que posee espacios) que me conviene usar??
2) En el caso de tener que cargar un entero y este no esta (solo hay un enter). Como lo implemento?? Porque si hay un enter en vez de un numero se me corre todo.

Muchas Gracias!

Neftali [Germán.Estévez] 18-11-2010 10:17:35

Hola Rogelio.
Antes de continuar te hago una sugerencia; Si te es posible adoptarla dímelo, porque en ese caso las respuestas/soluciones son diferentes a las que puedes obtener tal y como o estás haciendo ahora.

La sugerencia es que utilices un TStrings para cargar el fichero, el lugar de hacerlo con las funciones que comentas. Es mucho más simple y salvo que el fichero fuera "muy, muy grande" no creo que existan diferencias de velocidad aceptables.

Puedes cargar un fichero de texto utilizando un código similar a este:

Código Delphi [-]
var
  TS:TStrings;
begin

  TS := TStringList.Create();
  try
    TS.LoadFromFile('c:\temp\datos.txt');

    ...
    // procesar
    ...
  finally
    TS.Free;
  end;
end;

De estar forma el recorrido paracapturar las líneas es mucho más sencillo:

Código Delphi [-]
  Str := TS[0]    -->  Obtendrías la primera línea
  
  // para recorrerlas todas
  for i:=0 to (TS.Count - 1) do begin
    Str := TS[i]
    ...
  end;

rogeliogamberro 18-11-2010 13:18:23

Gracias por tu respuesta... Pense antes hacerlo con un Memo oculto pero tiene la limitacion de los 64KB. Actualmente el fichero esta en el orden de los 3,5MB.... Conviene hacer como tu dices o con las funciones que nombre? Y como seria la idea para procesar?? Primero lo leo como texto, valido y convierto al formato que necesito?

Neftali [Germán.Estévez] 18-11-2010 13:49:55

Si en algun caso necesitas "saltarte" esa restricción puedes utilizar un TRichEdit, que en cierta manera es similar y no la tiene.
De todas formas, este no es el caso, porque no necesitas control visual (a no se que quieras seguir el proceso visualmente), te basta con la clase TStrings.

Con 3,5Mg, puedes hacerlo perfectamente con un TStrings.
Una simple prueba, en mi equipo, tarda 350 ms en cargarlo en un RichEdit, por el tema visual, y apenas 50 ms en cargarlo en un TStrings.

Para procesar, haz el recorrido leyendo por líneas, tal y como te he mostrado más arriba, y luego cada línea la tratas como sea necesario (convirtiéndola, almacenándola,...)

Un saludo.

rogeliogamberro 18-11-2010 18:01:22

Muchas Gracias por la pronta respuesta... Ya me pongo a trabajar en ello...


La franja horaria es GMT +2. Ahora son las 09:52:06.

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