>>>TEXT TO lcx NOSHOW >>>CDX >>>1 >>>10 >>>2 >>>03 >>>1.1 >>>12.R >>>1.1.R >>>1201.1.RBX.250.R.1 >>>1201.1.R.250.R.1 >>>1201.1.RBX.1.R.1 >>>1.R >>>1.R.1 >>>A >>>B >>>AA >>>5.R >>>CDXB >>>CDX.R >>>ENDTEXT &&lcx >>> >>>STRTOFILE(lcx,'xyz.tmp') >>> >>>CREATE CURSOR curXYZ (cField c(40),cTag c(40)) >>>APPEND BLANK &&just to add an empty record >>>APPEND FROM xyz.tmp DELIMITED WITH TAB >>> >>>DELETE FILE xyz.tmp >>> >>>*get max section length >>>lnLen = 1 >>>SELECT; >>> MAX(GetSectLen(Cur1.cField,@lnLen)) AS nLen; >>> FROM curXYZ AS Cur1; >>> INTO CURSOR curLen >>>USE >>>lnLen = lnLen+2 >>> >>>SELECT curXYZ >>>REPLACE ALL cTag WITH IP_ASCII(cField,lnLen) >>> >>>*create index >>>TEXT TO lcx NOSHOW TEXTMERGE >>>INDEX ON IP_ASCII(cField,<<lnLen>>) TAG anIndex >>>ENDTEXT &&lcx >>>EXECSCRIPT(lcx) >>> >>>*there we are >>>BROWSE LAST NOWAIT >>> >>>FUNCTION IP_ASCII >>> LPARAMETERS; >>> tcField,; >>> tnLength >>> >>> LOCAL; >>> lcReturn,; >>> lcSection,; >>> lnSections,; >>> lnSection >>> >>> LOCAL ARRAY; >>> laCols[1] >>> >>> lnSections = ALINES(laCols, UPPER(m.tcField),5,".") >>> lcReturn = "" >>> FOR lnSection = 1 TO m.lnSections >>> lcSection = laCols(m.lnSection) >>> lcReturn = m.lcReturn + IIF(ISDIGIT(m.lcSection),PADL(ALLTRIM(m.lcSection),m.tnLength,'0'),PADL(ALLTRIM(m.lcSection),m.tnLength,'@')) >>> NEXT >>> >>> RETURN PADR(m.lcReturn,MIN(LEN(m.tcField),240)) >>>ENDFUNC &&IP_ASCII >>> >>>*determine max section length in SELECT SQL >>>FUNCTION GetSectLen >>> LPARAMETERS; >>> tcField,; >>> tnReturn >>> >>> LOCAL; >>> lnSections,; >>> lnSection >>> >>> LOCAL ARRAY; >>> laCols[1] >>> >>> lnSections = ALINES(laCols, UPPER(m.tcField),5,".") >>> FOR lnSection = 1 TO m.lnSections >>> tnReturn = MAX(m.tnReturn,LEN(laCols(m.lnSection))) >>> ENDFOR &&lnSection >>> >>> RETURN tnReturn >>>ENDFUNC &&GetSectLen >>>