Extraer tokens estilo <Tag>

Extraer tokens estilo <Tag>

Postby hmpaquito » Tue Dec 17, 2013 11:13 am

Pues eso. Teniendo una cadena tal que asi:

"Nombre: <Tag_desconocido1> Apellidos <Tag_desconocido2>"

Necesito extraer <Tag_desconocido1> y <Tag_desconocido2> o guardarlos en un array.

¿ Tendria que ser recorriendo la cadena ? ¿ alguna funcion tipo token para ello ?

Gracias
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Extraer tokens estilo <Tag>

Postby Carlos Mora » Tue Dec 17, 2013 5:14 pm

Hola hmpaquito,

imagina que partimos la cadena usando '>' como separador. No uso hb_atokens, pero creo que hb_atokens( cString, '>' ) me da un array de elementos que, a excepción del último, terminan en algo así como 'algo<tagN", por lo que usando rat() en cada elemento hasta el penúltimo podrás extraer los tags que estas buscando.
Espero haberme explicado. Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Extraer tokens estilo <Tag>

Postby hmpaquito » Tue Dec 17, 2013 5:58 pm

Carlos,

Te agradezco tu interés.
Yo buscaba a ver si Harbour tuviera una funcion que directamente hiciera eso: una funcion a la que se le pasa los delimitadores y devuelve cada ocurrencia.
A vuela pluma, he hecho esta sin probar:

Code: Select all  Expand view


/*
   // Ejemplo de llamada:

   // Con lo siguiente obtendremos un array con los elementos:
   // {"cable", "enchufe", "mesa", "silla"}
   cFrase:= "elementos electricos <cable> y <enchufe>. elementos de madera <mesa> y <silla>"
   aTag:= aTags(cFrase, "<", ">")
   
*/

//------------------------------------------------------//
FUNCTION aTags(cTex, cDelim1, cDelim2)
Local aTag:= {}, cTag:= NIL, i

FOR i:= 1 to Len(cTex)
   cCar:= SubStr(cTex, i, 1)
   if cCar == cDelim1 .OR. cCar == cDelim2
       IF cCar == cDelim1
           cTag:= ""
       ENDIF  
       IF cCar == cDelim2 .AND. cTag != NIL
           Aadd(aTag, cTag)
           cTag:= NIL
       ENDIF
   ELSEIF cTag != NIL
       cTag+= cCar
   endif
NEXT
RETURN aTag
Last edited by hmpaquito on Tue Dec 17, 2013 6:07 pm, edited 1 time in total.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 33 guests