Thanks Alex and Mark!

I have it in place now and it is working great. Here is the final version I settled on. NOTE in my scenario, I open and close the file further up the chain because I call this function 4 times in a row.


FUNCTION GetPositionInBinaryFile pPath, pString, pStart, pOccurrence
    put the number of chars in pString into tStringLength
    put 100000 into tSize
    IF tStringLength = 0 THEN return 0
    IF tStringLength > tSize THEN return 0
    IF pStart = "" THEN PUT 1 into pStart
    IF pOccurrence = "" THEN PUT 1 into pOccurrence
    put 0 into tFoundCount
    put 0 into tPos
    -- file is already open so we don't need this
    --open file pPath for binary read
    REPEAT
        read from file pPath at pStart for tSize
        put it into tData
        IF the number of chars in tData < tStringLength THEN return 0
        put 0 into tCharsToSkip
        REPEAT
            put offset(pString, tData, tCharsToSkip) into n
            IF n > 0 THEN
                add  1 to tFoundCount
                IF tFoundCount = pOccurrence THEN
                    put pStart + tCharsToSkip + n into tPos
                    -- close file pPath
                    Return tPos
                ELSE
add n + tStringLength to tCharsToSkip -- what about overlapping sub-strings ??!!
                END IF
            ELSE
                -- no more to be found in this block
                EXIT REPEAT
            END IF
        END REPEAT
-- we get here when n = 0, i.e. no more occurrences in this block
        put pStart + tSize - tStringLength into pStart
    END REPEAT

END GetPositionInBinaryFile



--

Todd Geist
______________________________________
g e i s t   i n t e r a c t i v e

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to