Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Leyendo Archivos Con Delphi

Iniciado por GrEnDeL, 08 de Julio de 2004, 07:32:09 PM

« anterior - próximo »

GrEnDeL

 ¡Cuanto tiempo!

Resulta que estoy haciendo un programita y TENGO que hacerlo en Delphi... y echo de menos mi querido C. Lo que quiero es leer de un archivo de texto valores reales y detectar cuando llega el fin de línea. Será una tontería, lo sé, pero es que estoy empezando a plantearme programar un analizador léxico para hacer algo que seguro que es mucho más fácil.

A ver si me podéis echar una manilla. ¡Gracias por adelantado!

PD: También se aceptan enlaces a páginas de Delphi donde pueda encontrar una solución ;)
b>Cristóbal Carnero Liñán aka GrEnDeL
http://www.grendelweb.go.to
grendel_ccl@hotmail.com

rrc2soft

 No te "cabrees", que Delphi es mu sencillo y mu agradable de utilizar  ;)
Venga, aqui va un ejemplo de como leer una linea completa de texto. No es leer reales, pero luego puedes analizar la cadena:

function leerfichero(const Path:string):string;
Var  F : TextFile;
       Linea : String;
begin
 Result := ''; // Cadena vacia
 if FileExists(Path) then
 begin
    Assign(F,Path);
    Reset(F);
    while not Eof(F) do
    begin
       ReadLn(F, Linea); // Lee una Linea en Linea :)
       Result := Result + Linea + #13#10;
    end;
    CloseFile(F);
  end;
end;

Lord Trancos 2

 Otra forma:


var _st : TStringList;
 _c : longint;

begin
 _st := TStringList.Create();

 try
   _st.LoadFromFile('archivo.txt');
 except
   // mierda, no se cargo el archivo...
 end;

 for _c := 0 to _st.Count - 1 do
 begin
   // haz aqui lo que tengas que hacer
 end;

 _st.Free;
end;
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Lord Trancos 2

 Por cierto, aqui tienes un ejemplo de como hacer el "split" de visual basic en delphi:

http://delphi.about.com/cs/adptips2002/a/b...bltip1102_5.htm

el resto seria hacer un strtofloat para convertir de cadena a numero real.

Con todo eso tienes el asunta casi ya hecho. Si no te aclaras, esplica mejor que es exactamente lo que quieres hacer y en un plis te montamos el codigo que necesitas. (no te pases pidiendo, eh :P)
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

GrEnDeL

 Joe, tios... ¡Sois la ostia! ¡Muchas gracias! Habéis sido rapidísimos (ole)

Todavía no lo he probado pero seguro que me será de mucha ayuda. Cuando termine el código os lo pasaré, aunque solo sea para que veáis que me ha servido de algo (uoh) .

De nuevo gracias ;)
b>Cristóbal Carnero Liñán aka GrEnDeL
http://www.grendelweb.go.to
grendel_ccl@hotmail.com

GrEnDeL

 Lo prometido es deuda! He estado sin internet casi todo el verano, por eso no he podido escribir antes.

Ahí va un código para leer una tabla de datos reales en formato de texto en Delphi. La primera fila del archivo son los títulos de cada columna.

procedure split (const delimiter: Char; input: String; const strings: TStrings);
begin
  assert(assigned(strings));
  strings.Clear;
  strings.delimiter:=delimiter;
  strings.delimitedText:=input;
end;

procedure abrir(nombre: String);
var
 st, aux : TStringList;
 cad : String;
 i, j : LongInt;
begin
 try
   st:=TStringList.create();
   st.LoadFromFile(nombre);
   NombreArchivo:=nombre;

   grdDatos.RowCount:=st.Count;

   aux:=TStringList.create();
   split(' ', st[0], aux); // No sé por qué pero así se salta también los tabuladores, creo
   grdDatos.ColCount:=max(grdDatos.ColCount,aux.Count);
   for j:=0 to aux.count-1 do begin
     grdDatos.Cells[j,0]:=aux[j];
   end;
   aux.free;

   for i:=1 to st.count-1 do begin
     aux:=TStringList.create();
     split(' ', st[i], aux);
     grdDatos.ColCount:=max(grdDatos.ColCount,aux.Count);
     for j:=0 to aux.count-1 do begin
       grdDatos.Cells[j,i]:=floattostr(strtofloat(aux[j]));  // Esto es para ver si son en realidad número reales (nooo)
     end;
     aux.free;
   end;

   st.free;
 except
   ShowMessage('Error al leer el archivo '+nombre);
 end;
end;


Muchas gracias por las respuestas que me distéis en su día rrc2soft y Lord Trancos 2 ¡me han servido todas!

PD: Es cierto, el Delphi es mu sencillito!
b>Cristóbal Carnero Liñán aka GrEnDeL
http://www.grendelweb.go.to
grendel_ccl@hotmail.com

rrc2soft







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.