Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   leer palabras de ficheros de texto (https://www.clubdelphi.com/foros/showthread.php?t=49407)

alba13 20-10-2007 19:11:10

leer palabras de ficheros de texto
 
necesito leer palabra a palabra un fichero de texto. que metodo debo usar?
con read que se lee? en java he usado el StringTokenizer para separar las palabras al leer una fila con el readLine del BufferedReader asociado al FileReader.
muchas gracias

aeff 20-10-2007 23:39:48

implementa estas dos funciones y la variable siguiente:

Código Delphi [-]
var
  vContenido: string;

implementation

procedure LoadFileTxt(fname: string);
var
  vTxtFile: TextFile;
  vLine: string;
begin
  vContenido := '';
  AssignFile(vTxtFile, fname);
  Reset(vTxtFile);
  while not Eof(vTxtFile) do
    begin
      Read(vTxtFile, vLine);
      vContenido := vContenido + vLine + ' ';
    end;
  CloseFile(vTxtFile);
end;

function GetPalabra(index: Integer): string;
var
  vSubStr, vWord: string;
  WordCount: Integer;
begin
  WordCount := 0;
  vSubStr := TRIM(vContenido) + ' ';
  while WordCount < index do
    begin
      if vSubStr = ' ' then
        begin
          vWord := '';
          break;
        end;
      vWord := Copy(vSubStr, 1, Pos(' ', vSubStr));
      vSubStr := TRIM( Copy(vSubStr, Length(vWord), Length(vSubStr))) + ' ';
      Inc(WordCount);
    end;
  Result := vWord;
end;

un ejemplo de uso:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  LoadFileTxt('C:\aeff.txt');
  Caption := GetPalabra(3);
end;

espero que te sirva,

saludos

aeff

aeff 20-10-2007 23:40:53

pueden haber métodos mas eficientes, pero ese es el que mas rápido se me ocurrio

alba13 21-10-2007 10:25:06

gracias
 
gracias,
y que metodo se utiliza para saber si hemos llegado al final del fichero? es que tengo q recorrerlo entero leyendo palabra a palabra.

alba13 21-10-2007 10:27:04

perdona... ya lo he encontrado en tu codigo. muchas gracias otra vez

alba13 21-10-2007 10:49:37

me parece que lo que me has enviado no me sirve en este caso.
como puedo dividir un texto en sus palabras sin saber la longitud de cada una de ellas? (similar al stringTokenizer en java)
siento incordiar tanto.

basti 21-10-2007 12:27:30

Puedes utilizar la clase TStringList.

Código Delphi [-]
  sl := TStringList.Create;

  sl.LoadFromFile('c:\archivo.txt');
  sl.Delimiter := ' ';
  sl.DelimitedText := sl.Text;
  
  for i := 0 to sl.Count - 1 do
    Memo1.Lines.Add(sl[i]);

  sl.Free;

alba13 21-10-2007 12:34:14

gracias. con lo de antes y lo de ahora podre hacer todo. muchas gracias a los dos. muchas gracias :D

aeff 21-10-2007 15:53:13

oye basti, ya se que alba13 encontró lo que quería, pero ¿que quizo decir con esto?

Cita:

como puedo dividir un texto en sus palabras sin saber la longitud de cada una de ellas? (similar al stringTokenizer en java)
no entiendo!

alba13 21-10-2007 16:04:14

tengo un subprograma que dado un fichero de texto, en mi caso el quijote.txt busca una palabra que introduce el usuario en dicho fichero. yo hasta que aeff me ha ayudado solo sabia leer por filas, y lo que queria era separar el fichero en palabras, no en filas para ir comparando una a una las palabras.
¿ahora si?
por cierto, lo he solucionado perfectamente. me funciona bien toda la aplicacion de delphi, muchas gracias a todos por vuestro tiempo, a ver que tal me sale el proyecto.
un saludo

aeff 21-10-2007 16:15:15

ahhhhhhhh! lo que querías era separar el fichero.txt palabra a palabra, ok ok, si lo hubieras especificado desde el principio, cuando revisé tu post entonces hubiera programado para ello, de todas formas ya lograste lo que querias y eso es lo que vale,

SUERTE EN TU PROYECTO!

saludos
aeff


La franja horaria es GMT +2. Ahora son las 02:16:06.

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