Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2008
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 132
Poder: 15
muli Va por buen camino
Fichero de Texto Enorme

Estoy tratando de manejar ficheros de texto que son enormes (50 mb), ya os imaginais cuantos registros puede traer, el problema es que antes lo tengo que manipular con el Ultra Edit y asignarle 200 caracteres por linea por ejemplo y luego lo manipulo desde delphi, conoceis alguna forma de tratarlo sin necesidad de cortarlo antes con el ultra edit, algun componente que me lo trate con rapidez.

Gracias.

Saludos.
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #2  
Antiguo 11-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.243
Poder: 21
jachguate Va por buen camino
Podes abrirlo directamente con TStringList o con archivos de texto clásicos (de los que ya existían desde turbo pascal) sin necesidad de pasarlo por nada antes.

Un saludo.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 11-02-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 14
cHackAll Va por buen camino
estoy de acuerdo con lo que dice jachguate; sin embargo dicho objeto o cualquier componente que vayas a utilizar va a acceder a las APIs que acceden al sistema de archivos; si nos das una idea del proceso que llevas con dichos archivos çde texto talvez podríamos guiarte con algo de código.

Siendo una solucion mas efectiva, tambien es más costosa en conocimientos y en tiempo.

Saludos
Responder Con Cita
  #4  
Antiguo 14-02-2008
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 132
Poder: 15
muli Va por buen camino
El tema es el siguiente:
Fichero de texto enorme incluso tengo uno de 250 mb.
Tiene una sola linea
Con el UltraEdit lo parto a 1000 caracteres por linea.
Luego desde Delphi abro el fichero y voy copiando linea a linea para una BD según la posición que ocupe.

Gracias.

Saludos.
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #5  
Antiguo 14-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.243
Poder: 21
jachguate Va por buen camino
Pues lo que digo es que no hace falta abrir el archivo con ultraedit para partirlo. Podrías hacerlo directamente con delphi.

Si tiene 250Mb. sin saltos de línea, no creo que eso pueda manejarse en un solo string... según recuerdo el límite es de 64Kb. de texto en un solo string.

Pero si podes abrirlo como un stream... e ir cargandolo en los bloques que te parezca conveniente en un buffer.

Si procesas estos archivos con frecuencia, el tiempo que invirtás en programarlo se pagará solo al simplificar el proceso metiendo directamente el archivo al programa.

Un saludo.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 16-02-2008
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 132
Poder: 15
muli Va por buen camino
Te refieres a cargarlo en un componente Memo, RichEdit, etc, y luego cortarlo como yo quiera. El tema es que lo he cargado en un Memo y tambien en un RichEdit, pero ahora estoy parado no se como cortarlo por ejemplo a 100 caracteres por linea.

Gracias.

Saludos.
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #7  
Antiguo 18-02-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 14
cHackAll Va por buen camino
Cita:
Empezado por muli Ver Mensaje
Te refieres a cargarlo en un componente Memo, RichEdit, etc, y luego cortarlo como yo quiera. El tema es que lo he cargado en un Memo y tambien en un RichEdit, pero ahora estoy parado no se como cortarlo por ejemplo a 100 caracteres por linea.

Gracias.

Saludos.
Espero no salirme por la tangente pero se me ocurre;

Código Delphi [-]
var Buffer: array [0..666] of Char;
procedure TForm1.ButtonClick(Sender: TObject);
var hFile, Size: Integer;
begin
 hFile := _lopen('archivo.txt', OF_READ);
 if hFile = -1 then Exit; // Error de apertura
 repeat Size := _lread(hFile, @Buffer, SizeOf(Buffer) - 1); // Leemos cada N caracteres
  Buffer[Size] := #0;
  if LongBool(Size) then 
   mysql_query(Handle, PChar('insert into noseque values ('+#39+@Buffer+#39+')')); // Por ejemplo.
 until Size < (SizeOf(Buffer) - 1);
 CloseHandle(hFile);
end;

Espero no hayan muchos errores pues no tenga el Delphi a la mano; pero la idea es leer cada cierta cantidad de bytes del archivo e ir insertandolos a la BD

Suerte.
Responder Con Cita
  #8  
Antiguo 19-02-2008
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 132
Poder: 15
muli Va por buen camino
Supongo que el array [0..666] son los caracteres a los que quiero cortar.

Lo he probado del siguiente modo:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
Var hFile, Size: Integer;
    Buffer : Array [0..200] Of Char;

begin
 If OpenDialog1.Execute Then
 Begin
   hFile := _lopen(PChar(OpenDialog1.FileName), OF_READ);
   if hFile = -1 then Exit; // Error de apertura
   repeat Size := _lread(hFile, @Buffer, SizeOf(Buffer) - 1); 
    Buffer[Size] := #0;
    if LongBool(Size) then
    Memo2.Lines.Add(PChar(@Buffer)); // Por ejemplo.
 until Size < (SizeOf(Buffer) - 1);
 CloseHandle(hFile);
 end;
End;

Y Cortando a 120 caracteres el fichero correspondiente, lo hace perfectamente, pero el de 200 me cae en bucle, y no se por que.
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #9  
Antiguo 19-02-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 14
cHackAll Va por buen camino
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var hFile, Size, Count: Integer;  Buffer : Array [0..200] Of Char;
begin
 if OpenDialog1.Execute Then
  begin
   hFile := _lopen(PChar(OpenDialog1.FileName), OF_READ);
   if hFile = -1 then Exit;
   Size := GetFileSize(hFile, nil);
   while LongBool(Size) do
    begin
     Count := SizeOf(Buffer) - 1;
     if Size < Count then Count := Size;
     Dec(Size, _lread(hFile, @Buffer, Count));
     Buffer[Count] := #0;
     Memo2.Lines.Add(PChar(@Buffer));
    end;
  CloseHandle(hFile);
 end;
end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
verificar fichero de texto arley_molina Varios 2 12-06-2006 21:52:40
fichero de texto con tabulaciones davidgaldo Varios 5 30-11-2005 17:23:38
leer fichero de texto davidgaldo Varios 1 08-11-2005 16:05:12
Ayuda con fichero de texto jadelphi Varios 4 07-10-2004 10:43:14
¿Temporal enorme en QuickReport??!!! Diegoval Impresión 12 27-05-2004 14:25:42


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


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi