Ir al contenido


Foto

[RESUELTO] ¿Cómo puedo leer una línea específica de un TXT?


  • Por favor identifícate para responder
19 respuestas en este tema

#1 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 08 noviembre 2009 - 09:05

Holas amigos, de nuevo yo, ¿alguno sabe cómo puedo leer una línea específico de un TXT?, por ejemplo, en un txt tengo:

Prueba1
Prueba2
Prueba3
Prueba4

SI quiero leer sólo la línea "Prueba3" y mostrarlo en un TEdit, ¿cómo lo haría?, porque sólo puedo cargar el archivo completo :(.

Fleon xD
  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 08 noviembre 2009 - 11:44

Hola Fleon,
¿De que modo estás abriendo/leyendo el archivo?

Se podría emplear un TStringList, por ejemplo, y abrirlo con LoadFromFile(). Después mediante su propiedad Strings[] posicionarse en alguna línea determinada y leerla.

Saludos,
  • 0

#3 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 08 noviembre 2009 - 12:18

Hola Delphius, pues lo abro/leo de la manera típica:



delphi
  1. var
  2.   SomeTxtFile : TextFile;
  3.   j: integer;
  4. begin
  5.   AssignFile(SomeTxtFile, 'c:\MyTextFile.txt') ;
  6.   Rewrite(SomeTxtFile) ;
  7.   for j := 0 to (-1 + Memo1.Lines.Count) do
  8.     WriteLn(SomeTxtFile, Memo1.Lines[j]) ;
  9.   CloseFile(SomeTxtFile) ;
  10. end;



Aquí estoy cargando todo el contenido en un Memo, pero no es lo que deseo, pregunta, antes de empezar, sé que con esto se resuelve manejando con INI, pero, si le cambio la extensión, ¿igual se maneja como INI?.

Fleon xD

  • 0

#4 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 08 noviembre 2009 - 03:07

Saludos fleon, en esta pagina hay muchas indicaciones de como trabajar con cadenas de texto. Esta es la primera parte, pero en el lateral busca las siguientes partes que llegan hasta la 5. Chequeala y ojala te sirva de ayuda.
http://delphiallimit...de-texto-i.html




  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 noviembre 2009 - 10:11

A ver

No entiendo que quieres hacer, pero si conoces la línea que quieres puedes hacer esto.....



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   Memo1.Lines.LoadFromFile('C:\Desarrollo\Archivo.txt');
  4.   ShowMessage(Memo1.Lines[2]);
  5. end;



Salud OS
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 noviembre 2009 - 11:01

Otra opción es hacer esto:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   SomeTxtFile : TextFile;
  4.   NumLinea: integer;
  5.   Linea: String;
  6. begin
  7.   AssignFile(SomeTxtFile, 'c:\MyTextFile.txt') ;
  8.   Reset(SomeTxtFile) ;
  9.   NumLinea := 0;
  10.   REPEAT
  11.       Readln(SomeTxtFile,Linea);
  12.       Inc(NumLinea);
  13.   UNTIL NumLinea = 3;
  14.   CloseFile(SomeTxtFile) ;
  15.   ShowMessage(Linea);
  16. end;



Salud OS
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 noviembre 2009 - 11:07

Otra Opcion



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   SomeTxtFile : TextFile;
  4.   Linea: String;
  5. begin
  6.   AssignFile(SomeTxtFile, 'c:\MyTextFile.txt') ;
  7.   Reset(SomeTxtFile) ;
  8.   REPEAT
  9.       Readln(SomeTxtFile,Linea);
  10.   UNTIL Copy(Linea,1,7) = 'Prueba3';
  11.   CloseFile(SomeTxtFile) ;
  12.   ShowMessage(Linea);
  13. end;



Salud OS
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 noviembre 2009 - 11:10

La otra opción es que esperes a que cHackAll y/o escafandra estén por aquí :D :D :D

Salud OS
  • 0

#9 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 09 noviembre 2009 - 07:33

WoW, cuantas opciones :D, gracias Egostar en un rato les comento (y)

Fleon xD
  • 0

#10 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 09 noviembre 2009 - 07:50

El siguiente ejemplo utiliza  2 TEdits, uno para digitar el número de línea y otro para capturar el contenido de la línea.



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. Texto : TStringList;
  4. Linea :Integer;
  5. Archivo : String;
  6. begin
  7. Linea := StrToInt(Edit1.Text);
  8. //Archivo := Asigna aquí tu archivo;
  9. Texto := TStringList.Create;
  10. try
  11. Texto.LoadFromFile(Archivo);
  12. if (Linea >=0 )and (Linea <= Texto.Count - 1) then
  13.   Edit2.Text :=  Texto.Strings[Linea]
  14. finally
  15.   Texto.Free
  16. end;
  17. end;


  • 0

#11 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 09 noviembre 2009 - 08:19

El ejemplo del post anterior solo te sirve si coneces la posición de la línea en cuestión,  el siguiente ejemplo lo hace utilizando como  referente al propia línea.



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   I: Integer;
  4.   Archivo: String;
  5.   Texto: TStringList;
  6. begin
  7.   // Archivo := Ruta de el archivo
  8.   Texto := TStringList.Create;
  9.   try
  10.     for I := 0 to Texto.Count - 1 do
  11.       if Texto.Strings[I] = 'Prueba3' then
  12.         Edit2.Text := Texto.Strings[I]
  13.   finally
  14.   Texto.Free
  15.   end;
  16. end;


  • 0

#12 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 09 noviembre 2009 - 09:28

He probado todos y me han funcionado de perlas, Egostar, he optado por tu última opción, te pregunto, tengo el siguiente code:



delphi
  1. var
  2.   File: TextFile;
  3.   Linea: String;
  4. begin
  5.   AssignFile(File, FileName);
  6.   Reset(File);
  7.   repeat
  8.     ReadLn(File,Linea);
  9.   Until Copy(Linea,1,5) = 'BAND0';
  10.   CloseFile(File);
  11.   Edit1.Text := Copy(Linea,7,Length(Linea));



Me funciona bien, pero, ¿cómo cargaría 10 líneas diferentes en 10 edits de un sólo tiro? :s
  • 0

#13 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 09 noviembre 2009 - 09:37

Hola de nuevo, Wilson, intenté hacerlo con tu code, y lo hice así:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   Texto: TStringList;
  4.   i: Integer;
  5. begin
  6.   Texto := TStringList.Create;
  7.   Texto.LoadFromFile('C:\Prueba.txt);
  8.   for i := 0 to Texto.Count -1 do begin
  9.     if Texto.Strings[i] = 'Prueba3' then
  10.       Memo2.Lines.Add(Copy(Texto.Strings[i],9,Length(Texto.Strings[i])));
  11.   end;
  12. Texto.Free;
  13. end;



Y no me mostró nada :(
  • 0

#14 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 09 noviembre 2009 - 09:46

Asi me funciona correctamente



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   I: Integer;
  4.   Archivo: String;
  5.   Texto: TStringList;
  6. begin
  7. Archivo := 'D:\PP.TXT';// ruta del archivo
  8.   Texto := TStringList.Create;
  9.   try
  10.   Texto.LoadFromFile(Archivo);
  11.     for I := 0 to Texto.Count - 1 do
  12.       if Texto.Strings[I] = 'Prueba3' then
  13.       Memo1.Lines.Add(Texto.Strings[I])
  14.   finally
  15.   Texto.Free
  16.   end;
  17. end;


  • 0

#15 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 09 noviembre 2009 - 09:55

Hola Wilson, lo acabo de hacer exactamente como lo pones, claro, cambiandole algunos valores, pero no me furula, hasta lo intenté de esta manera:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   I: Integer;
  4.   Archivo: String;
  5.   Texto: TStringList;
  6. begin
  7. Archivo := 'C:\Prueba.txt';// ruta del archivo
  8.   Texto := TStringList.Create;
  9.   try
  10.   Texto.LoadFromFile(Archivo);
  11.     for I := 0 to Texto.Count - 1 do
  12.       if AnsiContainsStr('Prueba3', Texto.Strings[I]) then
  13.       Memo1.Lines.Add(Texto.Strings[I])
  14.   finally
  15.   Texto.Free
  16.   end;
  17. end;



Y tampoco me funciona :s, ¿estaré haciendo algo mal?.
  • 0

#16 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 09 noviembre 2009 - 10:02

De nuevo yo, pos sí estaba haciendo algo mal :$, no ponía el valor completo de la línea :p, pero de todos modos, ¿porqué el último code que coloqué no furula?. ^o|
  • 0

#17 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 09 noviembre 2009 - 10:11

¿cómo cargaría 10 líneas diferentes en 10 edits de un sólo tiro?


El siguiente ejemplo carga las primeras 10 líneas de un archivo de texto en 10  TEdits



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   Edits: array [0 .. 9] of TEdit;
  4.   I: Integer;
  5.   Archivo: String;
  6.   Texto: TStringList;
  7. begin
  8.   Edits[0] := Edit1;
  9.   Edits[1] := Edit2;
  10.   Edits[2] := Edit3;
  11.   Edits[3] := Edit4;
  12.   Edits[4] := Edit5;
  13.   Edits[5] := Edit6;
  14.   Edits[6] := Edit7;
  15.   Edits[7] := Edit8;
  16.   Edits[8] := Edit9;
  17.   Edits[9] := Edit10;
  18.   Archivo := 'D:\PP.TXT';//Ruta del archivo
  19.   Texto := TStringList.Create;
  20.   try
  21.     Texto.LoadFromFile(Archivo);
  22.     for I := 0 to Length(Edits)-1 do
  23.           Edits[i].Text := Texto.Strings[I]
  24.   finally
  25.   Texto.Free
  26.   end;
  27. end;


  • 0

#18 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 09 noviembre 2009 - 10:17

De nuevo yo, pos sí estaba haciendo algo mal , no ponía el valor completo de la línea , pero de todos modos, ¿porqué el último code que coloqué no furula?.


El orden de los  parámetros de AnsiContainsStr  está invertido.
  • 0

#19 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 09 noviembre 2009 - 10:20

Y que es lo que quieres colocar en los 10 Edits ????

Salud OS
  • 0

#20 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 09 noviembre 2009 - 10:22

El orden de los  parámetros de AnsiContainsStr  está invertido.


tremendo, ahora sí furula :p, gracias amigo, con el último code tuyo y esto ya tengo material suficiente, muchas gracias a todos.

Fleon xD
  • 0




IP.Board spam blocked by CleanTalk.