>>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 >>