Funcion STREXTRACT (VFP)

From codeWiki
Jump to: navigation, search

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
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox