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 21-07-2006
manolop manolop is offline
Miembro
 
Registrado: May 2005
Posts: 109
Poder: 12
manolop Va por buen camino
como leer n caracteres de un archivo

Hola a todos, tengo un archivo de texto que es muy muy grande (del orden de 800 MB) y necesito leer bloques de 700 bytes. Estoy probando este codigo, pero no me sirve pq no puedo limitar la informacion que leo:

var
fich:TextFile;
cad:ansistring;
begin
// database1.Commit;
try
try
AssignFile(fich,'fichero.txt');
reset(fich);
while not eof(fich) do
begin
readln(fich,cad);
memo1.Text:=memo1.Text+cad; //esto es solo para ver el resultado
end;
finally
closeFile(fich);
end;
except
on E:Exception do
showmessage('Error de acceso al fichero con msg: '+E.Message);
end;

Por favor, si alguien sabe como deberia leer el archivo, les estaria muy agradecido. Muchas gracias.
Responder Con Cita
  #2  
Antiguo 21-07-2006
Avatar de Neftali
Neftali Neftali is offline
-Germán Estévez-
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 14.926
Poder: 10
Neftali Va camino a la famaNeftali Va camino a la fama
Post

El problema es que estás leyendo líneas, tal vez deberías leer caracteres.
Revisa la ayuda sobre Read.
__________________
Neftalí -web - MyDropBox-
Guía de estilo, Guía alternativa, TAG's.
*Añade tu foto al Club*

(UPDATE) TrackInfo v.1.7b

Contactar con el Clubdelphi


P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 21-07-2006
manolop manolop is offline
Miembro
 
Registrado: May 2005
Posts: 109
Poder: 12
manolop Va por buen camino
ya me estoy leyendo el reset pero no me deja pasarle el numero de caracteres a leer, y creia que con BlockRead deberia pero no me deja pasarle una cadena como buffer. La verdad es que no se como podria hacer esto. Si supieras solo que funcion utilizar para leer n caracteres ya lo tendria todo solucionado. Muchas gracias.
Responder Con Cita
  #4  
Antiguo 21-07-2006
Avatar de Neftali
Neftali Neftali is offline
-Germán Estévez-
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 14.926
Poder: 10
Neftali Va camino a la famaNeftali Va camino a la fama
Creo que si utilizas Seek para colocarte en una posicióin del fichero y luego Read (no ReadLn) para leer n caracteres te debería funcionar.
__________________
Neftalí -web - MyDropBox-
Guía de estilo, Guía alternativa, TAG's.
*Añade tu foto al Club*

(UPDATE) TrackInfo v.1.7b

Contactar con el Clubdelphi


P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 21-07-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: Feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 16
seoane Va por buen camino
Prueba con esto:

Código Delphi [-]
var
  Fichero: File;
  Buffer: array[0..700] of Char; // 700 bytes + 1
  Leidos: Integer;
  Str: string;
begin
  AssignFile(Fichero,'c:\Archivo.txt');
  Filemode:= fmOpenRead;
  {$I-}
    Reset(Fichero,1);
  {$I+}
  if IOResult = 0 then
  begin
    repeat
      FillChar(Buffer,Sizeof(Buffer),0);
      BlockRead(Fichero,Buffer,Sizeof(Buffer)-1,Leidos);
      if Leidos > 0 then
      begin
        Str:= String(PChar(@Buffer));
        // Aqui haces lo que quieres con el string
        ShowMessage('Longitud del string = ' + IntToStr(Length(Str)));
      end;
    until Leidos < (Sizeof(Buffer) - 1);
    CloseFile(Fichero);
  end else
    ShowMessage('No puedo abrir el archivo');
end;

Vamos leyendo los bytes de 700 en 700 y luego los convertimos en un string. el byte extra en el buffer es porque las cadenas tipo PChar necesitan acabar en un carácter nulo. El resto creo que se entiende bien, sino pregunta.
Responder Con Cita
  #6  
Antiguo 21-07-2006
manolop manolop is offline
Miembro
 
Registrado: May 2005
Posts: 109
Poder: 12
manolop Va por buen camino
muchisisimas gracias, me has ahorrado un monton de tiempo. Muchas gracias de verdad. Un fuerte abrazo
Responder Con Cita
  #7  
Antiguo 18-12-2007
sépoco sépoco is offline
Miembro
 
Registrado: Dec 2007
Posts: 10
Poder: 0
sépoco Va por buen camino
Leer linear de archivo .txt

IMP20983;0;IMP20983
VK RF SE1052 SO M;9008;60490001070

Dejar en una variable cada campo separado por ;
es un archivo .txt y los campos son variables. Leo el archivo y lo traspaso a un Memo.

if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
while not eof(F) do
begin
Readln(F, S);
Memo.Lines.Add(S);
end;
CloseFile(F);
end;

Última edición por sépoco fecha: 18-12-2007 a las 23:56:20.
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
Como leer un archivo del cual no se el tipo ? ilichhernandez Varios 4 04-07-2006 11:02:18
Como leer un archivo de texto por codigo Shidalis Varios 2 03-09-2005 06:54:34
Como puedo leer un archivo de variable... vicvil Varios 4 10-08-2005 23:31:02
Como leer un archivo TXT dentro de una Página AGAG4 Internet 1 31-08-2004 04:19:45
Leer Archivo .Q43 de Posición Fija es como un Txt FNADALO Varios 1 25-05-2004 18:15:27


La franja horaria es GMT +2. Ahora son las 06:51:24.


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