LOCAL lcDrawingXML, lcBegDelimiter, lcEndDelimiter, loDrawingXML, lnSecs lcDrawingXML = FILETOSTR('drawing1.xml') DECLARE INTEGER HeapAlloc IN Win32Api AS apiHeapAlloc INTEGER, INTEGER, INTEGER DECLARE INTEGER HeapFree IN Win32APi AS apiHeapFree INTEGER, INTEGER, INTEGER DECLARE LONG GetProcessHeap IN Win32API AS apiGetProcessHeap lcBegDelimiter = "<xdr:twoCellAnchor>" lcEndDelimiter = "</xdr:twoCellAnchor>" loDrawingXML = fAddStringToHeap(lcDrawingXML) lnSecs = SECONDS() lcTwoCellAnchor = fStrExtract(loDrawingXML, lcBegDelimiter, lcEndDelimiter, 1) ? "SYS(2600): " + TRANSFORM(SECONDS() - lnSecs) _CLIPTEXT = lcTwoCellAnchor SET STEP ON lnSecs = SECONDS() lcTwoCellAnchor = fStrExtract(loDrawingXML, lcBegDelimiter, lcEndDelimiter, 2000) ? "SYS(2600): " + TRANSFORM(SECONDS() - lnSecs) _CLIPTEXT = lcTwoCellAnchor SET STEP ON loDrawingXML = fReleaseStringFromHeap(loDrawingXML) FUNCTION fAddStringToHeap LPARAMETERS tcString LOCAL loString loString = CREATEOBJECT("Empty") ADDPROPERTY(loString, "Length", 0) ADDPROPERTY(loString, "BaseAdr", 0) loString.Length = LEN(tcString) loString.BaseAdr = apiHeapAlloc(apiGetProcessHeap(), 0, loString.Length) SYS(2600, loString.BaseAdr, loString.Length, tcString) RETURN loString ENDFUNC FUNCTION fStrExtract LPARAMETERS toString, tcBegDelimiter, tcEndDelimiter, tnOccurance LOCAL lnBeg, lcVal, lnEnd, lnBegLen, lnEndLen, lcStrExtract lnBegLen = LEN(tcBegDelimiter) lnEndLen = LEN(tcEndDelimiter) lnOccurance = 0 lcStrExtract = "" lnBeg = 1 DO WHILE lnBeg < toString.Length lcVal = SYS(2600, toString.BaseAdr-1 + lnBeg, lnBegLen) IF lcVal == tcBegDelimiter FOR lnEnd=lnBeg+lnBegLen TO toString.Length lcVal = SYS(2600, toString.BaseAdr-1 + lnEnd, lnEndLen) IF lcVal == tcEndDelimiter lnOccurance = lnOccurance + 1 IF lnOccurance = tnOccurance RETURN SYS(2600, toString.BaseAdr-1 + lnBeg, lnEnd - lnBeg + lnBegLen + 1) ENDIF lnBeg = lnEnd - 1 EXIT ENDIF ENDFOR ENDIF lnBeg = lnBeg + 1 ENDDO RETURN lcStrExtract ENDFUNC FUNCTION fReleaseStringFromHeap LPARAMETERS toString apiHeapFree(apiGetProcessHeap(), 0, toString.BaseAdr) RETURN .NULL. ENDFUNC