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:
/*
// 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