FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Sobre strtoken
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Sobre strtoken
Posted: Tue Oct 07, 2014 09:38 AM
Tenemos esta funcion :
Code (fw): Select all Collapse
function GetField( cString, nNr, cSepChar )
   DEFAULT cSepChar := "|"
return StrToken( cString, nNr, cSepChar )


Alguien tiene implementada ya " Setfiled() " ? :-)

Code (fw): Select all Collapse
Function Setfield( CString, cNewtoken , nNr ,cSepChar )

  DEFAULT cSepChar := "|"

........ ¿ ?

Return nil
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Sobre strtoken
Posted: Tue Oct 07, 2014 10:47 AM
He hecho esta implementacion. ¿ Alguna mejor ?
Gracias a todos.
Code (fw): Select all Collapse
function SetField( cString, cNewToken, nNr, cSepChar )
    LOCAL aTokens, i
    LOCAL cNewString:= ""
   DEFAULT cSepChar := "|"

      aTokens:= hb_atokens( cString, cSepChar )
      aTokens[nNr]:= cNewToken
      FOR i= 1 Len(aTokens)
        cNewString := cNewString + aTokens[i]+ IF( i >Len(atokens),cSepChar,"")
      NEXT

return cNewString
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Sobre strtoken
Posted: Tue Oct 07, 2014 02:50 PM
Yo la veo bien, si acaso añadiría un IF para controlar que nNr no sea mayor que el total de campos.
Code (fw): Select all Collapse
IF hb_TokenCount(cString,cSepChar) < nNr
   ...


Y aunque hace exactamente lo mismo, yo lo implentaria así.
Code (fw): Select all Collapse
   FOR EACH cToken IN aTokens
      cNewString += cToken+cSepChar
   NEXT
   cNewString:=Left( cNewString, Len( cNewString ) - 1 )
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Sobre strtoken
Posted: Tue Oct 07, 2014 07:16 PM
Ok Biel Mucho mejor tu implementación .
Muchas Gracias.
Al final queda así :
Code (fw): Select all Collapse
function SetField( cString, cNewToken, nNr, cSepChar )
    LOCAL aTokens, cToken 
    LOCAL cNewString:= ""
   DEFAULT cSepChar := "|"

IF hb_TokenCount(cString,cSepChar) < nNr
      aTokens:= hb_atokens( cString, cSepChar )
      aTokens[nNr]:= cNewToken
      FOR EACH cToken IN aTokens
           cNewString += cToken+cSepChar
      NEXT
      cNewString:=Left( cNewString, Len( cNewString ) - 1 )     
endif
return cNewString

Continue the discussion