Funcion STREXTRACT (VFP)
From codeWiki
La funcion STREXTRACT() fue introducida en VFP 7 y permite "extraer" una subcadena que esta insertada en otra cadena y delimitada por separadores, ejemplo:
?STREXTRACT("<items><item>pepe</item><item>juan</item></items>","<item>","</item>",1) --> pepe ?STREXTRACT("<items><item>pepe</item><item>juan</item></items>","<item>","</item>",2) --> juan
El siguiente código fuente corresponde a una implementación de STREXTRACT para versiones de VFP anteriores a VFP 9.
* STREXTRACT.PRG * Implementacion de la funcion STREXTRACT de VFP 9 para versiones anteriores * * Autor: Victor Espina * Fecha: Abril 2012 * PROCEDURE STREXTRACT(pcStringToSearch, pcBeginDelim, pcEndDelim, pnOccurrence, pnFlags) * IF VARTYPE(pnFlags)<>"N" pnFlags = 0 ENDIF IF VARTYPE(pnOccurrence)<>"N" pnOccurrence = 1 ENDIF LOCAL lCaseInsensitive, lEndDelimOptional, lIncludeDelim lCaseInsensitive = BITTEST(pnFlags, 0) lEndDelimOptional = BITTEST(pnFlags, 1) lIncludeDelim = BITTEST(pnFlags, 2) LOCAL cValue cValue = pcStringToSearch IF lCaseInsensitive cValue = UPPER(cValue) pcBeginDelim = UPPER(pcBeginDelim) pcEndDelim = UPPER(pcEndDelim) ENDIF LOCAL nPos nPos = AT(pcBeginDelim, cValue, pnOccurrence) IF nPos = 0 RETURN "" ENDIF cValue = SUBS(cValue, nPos + LEN(pcBeginDelim)) nPos = AT(pcEndDelim,cValue) IF nPos = 0 AND !lEndDelimOptional RETURN "" ENDIF cValue = LEFT(cValue,nPos - 1) IF lIncludeDelim cValue = pcBeginDelim + cValue + IIF(nPos > 0,pcEndDelim,"") ENDIF RETURN cValue * ENDPROC