m-am uitat
mie mi-ar trebuie o functie stocata care sa gaseasca cel mai lung common substring cu 2 parametri
ceva e genul asta in fox:
FUNCTION FindCommon(tcS1,tcS2)
* Finds longest common substring (other than single
* characters) in tcS1 and tcS2, then recursively
* finds longest common substring in left-hand
* portion and right-hand portion. Updates the
* cumulative score.
LOCAL lnLongest, lnStartPos1, lnStartPos2, lnJ
LOCAL lcHoldStr, lcTestStr, lcLeftStr1, lcLeftStr2
LOCAL lcRightStr1, lcRightStr2
STORE 0 TO lnLongest, lnStartPos1, lnStartPos2
lcHoldStr = tcS2
DO WHILE LEN(lcHoldStr)>lnLongest
lcTestStr = lcHoldStr
DO WHILE LEN(lcTestStr)>1
lnJ = AT(lcTestStr,tcS1)
IF lnJ > 0
* Test string is sub-set of the other string
IF LEN(lcTestStr) > lnLongest
* Test string is longer than previous
* longest. Store its length and position.
lnLongest = LEN(lcTestStr)
lnStartPos1 = lnJ
lnStartPos2 = AT(lcTestStr,tcS2)
ENDIF
* No point in going further with this string
EXIT
ELSE
* Test string is not a sub-set of the other
* string. Discard final character of test
* string and try again.
lcTestStr = LEFT(lcTestStr,LEN(lcTestStr)-1)
ENDIF
ENDDO
* Now discard first char of test string and
* repeat the process.
lcHoldStr = RIGHT(lcHoldStr,LEN(lcHoldStr)-1)
ENDDO
* Update the cumulative score with the length of
* the common sub-string.
pnScore = pnScore + lnLongest
* We now have the longest common sub-string, so we
* can isolate the sub-strings to the left and right
* of it.
lcLeftStr1 = LEFT(tcS1,lnStartPos1-1)
lcLeftStr2 = LEFT(tcS2,lnStartPos2-1)
lcRightStr1 = SUBSTR(tcS1,lnStartPos1+lnLongest)
lcRightStr2 = SUBSTR(tcS2,lnStartPos2+lnLongest)
IF NOT EMPTY(lcLeftStr1) AND NOT EMPTY(lcLeftStr2)
* Get longest common substring from left strings
FindCommon(lcLeftStr1,lcLeftStr2)
ENDIF
IF NOT EMPTY(lcRightStr1) AND NOT EMPTY(lcRightStr2)
* Get longest common substring from right strings
FindCommon(lcRightStr1,lcRightStr2)
ENDIF
RETURN
ENDFUNC
ar cunostintele mele de sql sunt cam putine