Welcome to Sign in | Help

Re: sql store procedure - inreg care seamana intre ele

  •  10-18-2007, 3:59 PM

    Re: sql store procedure - inreg care seamana intre ele

    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 

View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems