Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿como parsear texto? (https://www.clubdelphi.com/foros/showthread.php?t=69589)

JXJ 27-08-2010 07:45:09

¿como parsear texto?
 
hola.

tengo una duda..

si engo un archivo de texto.
del cual tengo que encontrar el contenido dentro de
ciertas palabras

por ejemplo

descripcion: texto a encontrar
categoria: texto que varia
ubicacion: nuevo mexico

lo que esta en cursivas es texto que varia.
y to tomo como tokens que no varian
descripcion:
categoria:
es casi igual a lo que hace delphi al parsear el texto
entre begin y end;



ahora no se me ocurre como hacerlo.

gracias.

ElDioni 27-08-2010 10:53:50

Hola

Cita:

Empezado por JXJ (Mensaje 374727)
hola.
lo que esta en cursivas es texto que varia.
y to tomo como tokens que no varian
descripcion:
categoria:
es casi igual a lo que hace delphi al parsear el texto
entre begin y end;

No entiendo practicamente nada de a que te refieres en esta parte de tu mensaje pero de todas formas te pongo una función para saber si una cadena de texto está dentro de otra, espero que te sirva.

Código Delphi [-]
if pos('Texto a encontrar',variable o caja de texto que contiene el texto que varia)>0 then
  begin
    showmessage('texto encontrado');
  end
else
  begin
    showmessage('texto no encontrado');
  end;

Un saludo.

AzidRain 27-08-2010 20:40:41

Lo que te pusieron es extrictamente lo que quieres, entoncotrar una cadena dentro de otra. Recuerda que "parsear" es otra cosa distinta, pues implica no solamente encontrar palabras sino analizar algunas otras cosas de las palabras que vas encontrando. Por ejemplo, el Delphi el compilador analiza que por cada Begin exista un end y que por cada If haya una expresion válida con su Then..y un largo etc. No se si solo quieras limitarte a encontrar palabras o bien a analizarlas de alguna forma.

JXJ 27-08-2010 21:38:30

en un archivo de texto tengo que encontrar
el texto contenido entre las lineas

descripcion:
categoria:


descripcion: texto a encontrar
categoria: texto que varia
ubicacion: nuevo mexico
descripcion: texto a encontrar
categoria: texto que varia
ubicacion: nuevo mexico
descripcion: texto a encontrar
categoria: texto que varia
ubicacion: nuevo mexico
descripcion: texto a encontrar
categoria: texto que varia
ubicacion: nuevo mexico

AzidRain 27-08-2010 22:29:33

No pues dijera Quico..."Me doy!"

ecfisa 27-08-2010 23:17:56

Cita:

Empezado por JXJ (Mensaje 374771)
en un archivo de texto tengo que encontrar
el texto contenido entre las lineas

descripcion:
categoria:

Hola.

Coincido con ElDioni y AzidRain. Ateniendome al texto de tu post, esto hace lo que estas pidiendo...

Código Delphi [-]
function EntreDescripcionYCategoria(NomArch: string): TStrings;
var
  i,p: Integer;
  ts: TStrings;
begin
  ts:= TStringList.Create;
  ts.LoadFromFile(NomArch);
  for i:= 0 to ts.Count -1 do
  begin
    p:= Pos(':', ts[i]);
    if p > 0 then
     ts[i]:= Copy(ts[i], p + 1, Length(ts[i]));
  end;
  Result:= ts;
end;

Llamada ej.:
Código Delphi [-]
  Memo1.Lines:= EntreDescripcionYCategoria('C:\TEXTO.TXT');

Saludos.

JXJ 28-08-2010 20:51:10

no es muy claro por que no le entiendo bien a como hacerlo
la idea es que si tengo esto

descripcion: texto a encontrar
categoria: texto que varia
ubicacion: nuevo mexico
descripcion: texto a encontrar
categoria: texto que varia
ubicacion: nuevo mexico
descripcion: texto a encontrar
categoria: texto que varia
ubicacion: nuevo mexico
descripcion: texto a encontrar
categoria: texto que varia
ubicacion: nuevo mexico

proceso el archvio y tengo que obtener el resultado

texto a encontrar
texto a encontrar
texto a encontrar
texto a encontrar

Al González 29-08-2010 17:04:11

Hola Ángel.

Suponiendo que el contenido del archivo sea uniforme, es decir, que a partir de la línea 0 y cada tres líneas el texto a encontrar lleve siempre antepuesta la subcadena de 13 caracteres 'descripcion: ', el siguiente código te servirá:

Código Delphi [-]
Var
  I :Integer;
begin
  { L1 es un TStringList con el contenido del archivo y L2 un TStringList
    vacío donde se guardará el resultado }

  I := 0;

  While I < L1.Count Do
  Begin
    L2.Add (Copy (L1 [i], 14, MaxInt));
    Inc (I, 3);
  End;
end;

En caso de que el contenido del archivo sea más variado, convendría que nos dieras otros ejemplos del mismo para idear una mejor forma de realizar el análisis sintáctico ("parseo") que necesitas.

Saludos.

Al González. :)

JXJ 31-08-2010 05:15:50

no es uniforme... este problema me ha inspirado en hacer
mi lenguaje de programacion tijp php. asp.

pero con syntaxis delphi.

[Fuera del tema]
Conoce mi bitácora. ■ Solicito empleo fuera de México.
¿a que pais te quieres ir?

Al González 31-08-2010 22:31:02

Cita:

Empezado por JXJ (Mensaje 375072)
no es uniforme... este problema me ha inspirado en hacer
mi lenguaje de programacion tijp php. asp.

pero con syntaxis delphi.

Si el contenido del archivo no es uniforme, antes de otra cosa convendría conocer varios ejemplos de cómo pueden ser esos archivos, con el fin de determinar un patrón común. Una vez hecho esto, se podrá comenzar a desarrollar una rutina más elaborada que extraiga las partes deseadas del texto. :)

Cita:

Empezado por JXJ (Mensaje 375072)
[Fuera del tema]
Conoce mi bitácora. ■ Solicito empleo fuera de México.
¿a que pais te quieres ir?

Estoy a la espera de propuestas sin mayores distinciones por el momento. Como van las cosas en México, cada vez hay más países con entornos que facilitan una mayor calidad de vida. Me quedaría si mi concepto de patria no fuera el planeta entero, tuviera mucho arraigo local o no hubiera soñado de pequeño con vivir en otra nación. :) Cierro el off topic.


La franja horaria es GMT +2. Ahora son las 23:58:13.

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