Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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 Hace 3 Semanas
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 1.883
Poder: 14
oscarac Va por buen camino
problemas con archivos de texto

buenos dias
estoy haciendo un proceso de actualizacion con data bajada de una web
el archivo es este
http://www.sunat.gob.pe/descarga/Bue...ueCont_TXT.zip

dentro hay un archivo txt
cuando lo descargo, no se aprecian los saltos de linea las linea

f1 : TextFile;


Código Delphi [-]
AssignFile(f1, 'BueCont_TXT.txt');
  Reset(f1);
  while not Eof(f1) do
  begin
    _ruc := '';
    _RazonSocial := '';
    _desde := '';
    _Resol := '';
    Readln(f1, slinea);
    for i:= 1 to Length(sLinea) do
    begin

pero en sLinea me jala todo el archivo..... y no las lineas 1 x 1


cuando abroi el archivo en cuestion con le block de notas, sale todo mezclado, pero cuando uso otro editor llamese Sublime o notepad++ sale ordenado

alguien sabe como se puede abrir de esa forma en delphi?
o quiza estoy abriendo mal el archivo?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo Hace 3 Semanas
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 745
Poder: 17
cloayza Va camino a la fama
A si puedo darte una mano.

Me imagino que el archivo que estas intentando leer viene de algún Unix* o Linux.

Debido a eso el final de linea no es el mismo que los archivos de texto de windows.

Unix*linux: Marcador fin de linea es #13
linea-> aaaa#13

Windows: Marcador fin de linea es #13+#10
linea-> aaaa#13#10

Es por este motivo que al leerlo asume que es una GRAN LINEA.

Solución hay varias en la web te adjunto un ejemplo de lectura no es lo mejor es solo con fines didacticos.

Código Delphi [-]
procedure TForm4.Button1Click(Sender: TObject);
var
   f1 : TextFile;
   line:string;
   s:char;
begin
     AssignFile(f1, edtFile.Text);
     Reset(f1);

     memo1.lines.clear;

     while not Eof(f1) do
     begin
          Read(f1, s);
          {Evalua si S= (#13 = #$D)}
          if (s=#$D) then
          begin
              memo1.lines.Add(line);
              line:='';
          end
          else
          begin
              line:=line+s;
          end;
     end;
     closefile(f1);
end;

Recuerda esta codigo es muyyyyy lento ya que lee un caracter a vez...

Acá Converting from Windows ASCII to UNIX ASCII Text Files enlace donde proponen dos rutinas para convertir...

Saludos cordiales
Responder Con Cita
  #3  
Antiguo Hace 3 Semanas
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 1.883
Poder: 14
oscarac Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
A si puedo darte una mano.

Me imagino que el archivo que estas intentando leer viene de algún Unix* o Linux.

Debido a eso el final de linea no es el mismo que los archivos de texto de windows.

Unix*linux: Marcador fin de linea es #13
linea-> aaaa#13

Windows: Marcador fin de linea es #13+#10
linea-> aaaa#13#10

Es por este motivo que al leerlo asume que es una GRAN LINEA.

Solución hay varias en la web te adjunto un ejemplo de lectura no es lo mejor es solo con fines didacticos.

Código Delphi [-]
procedure TForm4.Button1Click(Sender: TObject);
var
   f1 : TextFile;
   line:string;
   s:char;
begin
     AssignFile(f1, edtFile.Text);
     Reset(f1);

     memo1.lines.clear;

     while not Eof(f1) do
     begin
          Read(f1, s);
          {Evalua si S= (#13 = #$D)}
          if (s=#$D) then
          begin
              memo1.lines.Add(line);
              line:='';
          end
          else
          begin
              line:=line+s;
          end;
     end;
     closefile(f1);
end;

Recuerda esta codigo es muyyyyy lento ya que lee un caracter a vez...

Acá Converting from Windows ASCII to UNIX ASCII Text Files enlace donde proponen dos rutinas para convertir...

Saludos cordiales


y con funcionan?
tienes un ejemplo?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #4  
Antiguo Hace 3 Semanas
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 745
Poder: 17
cloayza Va camino a la fama


Y el código que puse?

Necesitas un Tform + tmemo + button...

Este código llenara el memo con las líneas del archivo de texto BueCont_TXT.txt
Código Delphi [-]
procedure TForm4.Button1Click(Sender: TObject);
var
   f1 : TextFile;
   line:string;
   s:char;
begin
     AssignFile(f1, 'BueCont_TXT.txt'); //edtFile.Text);
     Reset(f1);

     memo1.lines.clear;

     while not Eof(f1) do
     begin
          Read(f1, s);
          {Evalua si S= (#13 = #$D)}
          if (s=#$D) then
          begin
              memo1.lines.Add(line);
              line:='';
          end
          else
          begin
              line:=line+s;
          end;
     end;
     closefile(f1);
end;
Que mas!!!
Responder Con Cita
  #5  
Antiguo Hace 3 Semanas
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.102
Poder: 15
ElKurgan Va por buen camino
Haya otra posibilidad, y es cargar el archivo en un TStringList. Cuando haces un LoadFromFile interpreta cada retorno de carro como un cambio de elemento, y luego puedes recorrerlo de esta forma:

Código Delphi [-]
MiStringList.LoadFromFile('BueCont_TXT.txt');
for i := o to MiStringList.Count - 1 do
begin
  slínea := MiStringList[i];
  for i:= 1 to Length(sLinea) do
  begin
  ....
end;

Un saludo
Responder Con Cita
  #6  
Antiguo Hace 3 Semanas
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 147
Poder: 6
bucanero Va camino a la fama
hola

aquí te dejo otra solución que te puede funcionar

Código Delphi [-]
  
  procedure loadFileContent(const AFileName:String);
  var
    text: TStreamReader;
    slinea: string;
  begin
    try
      text := TStreamReader.Create(AFileName, TEncoding.Default, true);
      while not text.EndOfStream do begin
        slinea := text.ReadLine;
        ProcesarLinea(slinea);
      end;
    finally
      text.Free;
    end;
  end;

var
  FileName: string;
begin
    FileName := 'c:\tmp\BueCont_TXT.txt';
    loadFileContent(FileName);
end;

y si lo que quieres es separar los campos incluidos dentro del propio fichero puedes hacerlo de una forma relativamente fácil de esta manera:
Código Delphi [-]

var
  parser: TStringList;

  procedure ProcesarLinea(const ALinea: string);
  var
    Ruc, nombre, razon, fecha, resolucion: string;
  begin
    parser.DelimitedText := '"' + ALinea.Replace('"', '""').Replace('|', '"|"') + '"';

    if parser.Count >= 5 then begin
      Ruc := parser.Strings[0];
      nombre := parser.Strings[1];
      razon := parser.Strings[2];
      fecha := parser.Strings[3];
      resolucion := parser.Strings[4];
    end;

    Memo1.Lines.Add(Ruc + #9 + nombre + #9 + razon + #9 + fecha + #9 + resolucion);
  end;

var
  FileName: string;
begin
  try
    parser := TStringList.Create;
    parser.StrictDelimiter := True;
    parser.Delimiter := '|';

    FileName := 'c:\tmp\BueCont_TXT.txt';
    loadFileContent(FileName);
  finally
    parser.Free;
  end;
end;

saludos
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
Funcion para extraer texto de archivos de texto JuanOrtega Varios 5 24-02-2015 12:08:23
XML vs archivos de texto jordan23 Varios 5 17-08-2007 19:18:06
Leer varios archivos de texto y extraer solo 2 lineas de ese texto mp3968 Internet 1 17-05-2007 20:24:09
Archivos de texto yekkita Varios 4 19-01-2007 20:06:03
archivos de texto ssanchez Varios 1 19-01-2007 15:44:34


La franja horaria es GMT +2. Ahora son las 22:07:23.


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