PDA

Ver la Versión Completa : leer palabras de ficheros de texto


alba13
20-10-2007, 19:11:10
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:


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:


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,
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.


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?


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