>dimension paLen[4], paSql[4] > >SELECT; > MAX(LEN(GETWORDNUM(TRIM(Cur2_1.cName),1,'.'))) ; > , MAX(LEN(GETWORDNUM(TRIM(Cur2_1.cName),2,'.'))) ; > , MAX(LEN(GETWORDNUM(TRIM(Cur2_1.cName),3,'.'))) ; > , MAX(LEN(GETWORDNUM(TRIM(Cur2_1.cName),4,'.'))) ; > FROM curSource AS Cur2_1; > into Array paLen > >Select MyFunc(cName) as v1; >, paSql[2] as v2; >, paSql[3] as v3; >, paSql[4] as v4; >from FROM curSource ; >order by 1,2,3,4 > >function MyFunc(tcName) >local lnRun, lcWord >for lnRun = 1 to Alen(paLen) > lcWord = getWordNum(tcName, m.lnRun, ".") > paSql[m.lnRun] = icase( empty(m.lcWord), Space(2*paLen[m.lnRun]) ; > , IsDigit(Alltrim(m.lcWord)), Str(Val(m.lcWord), paLen[m.lnRun]) + Padr(StripLeftDigits(Alltrim(m.lcWord)), paLen[m.lnRun]) ; > , Replicate("x", PaLen[m.lnRun]) + Padr(m.lcWord, paLen[m.lnRun]) ) >next >return paSql[1] > >Function StripLeftDigits(tcWord) >local lnRun >*-- as the func should only be called with leading digits >for lnRun = 2 to len(m.tcWord) > if !isdigit(Substr(m.tcWord, m.lnRUn, 1)) > exit > endif >next >return Stuff(m.tcWord, 1, m.lnRUn-1, "") >