Chip:

If you haven't grabbed a copy already
<http://www.pluggers.nl/product/api-pack/>, API Pack has a few BLOB
routines that you might find handy including API Find in Blob, API Replace
in Blob.

--
Douglas von Roeder
949-336-2902

On Wed, Nov 16, 2016 at 12:44 PM, Alan Chan <[email protected]> wrote:

> 1) Position use starting position
> 2) Position use * if possible - huge performance difference
> 3) Never change size of your source or result during process - this is the
> major issue for the performance
> 4) If your library are being used with large source/result often, try use
> blob which would be very fast.
>
> Alan Chan
>
>
> 4D iNug Technical <[email protected]> writes:
> >I have a routine which parses text.
> >It seemed to function well, until recently, when I had to feed it 50
> >megs of text (48.3 million characters).
> >The data is Cr delimited, and each line of text is of variable length.
> >
> >I am using the below mentioned truncate option, so each time the
> >source/original text is shorter.
> >
> >
> >it takes a LONG time to process.
> >the basic scheme is:
> >- Locate desired delimiter (1 or more characters) occurrence (1 or more
> >times)
> >- return text between either start of text, or previous delimiter and
> >final
> >- optionally truncate original text removing located text.
> >
> >ex:
> >utl_ParseString("A,B,C,D,E,F"; 3; ",") -> "C"
> >
> >if truncating, the original text ("A,B,C,D,E,F") would become "D,E,F"
> >
> >The routine uses Substring, and Position to accomplish this task.
> >
> >Does anyone have a "better" text parser?
> >
> >
> >--------
> >Follows my parsing code:
> >  //Project Method:  utl_parsestring
> >  // $1 - text - to be searched
> >  // $2 - integer - number of times to locate character
> >  // $3 - string (optional ) - the character to search for (default =
> >Tab)
> >  // $4 - pointer (optional) - pointer to initial string to allow
> >truncation
> >  //         (Destructive parsing)
> >
> >  //RETURNS - text - text found between occurence N and N-1(preceeding)
> >  //instance of the seperator character indicated
> >  //Ex:  utl_ParseString("A,B,C,D,E,F"; 3; ",") -> "C"
> >  //       utl_ParseString("A,B,C,D,E,F"; 1; ",") -> "A"
> >  //       utl_ParseString("A,B,C,D,E,F"; 6; ",") -> "F"
> >  //       utl_ParseString("A,B,C,D,E,F"; 0; ",") -> ""
> >C_TEXT($0;$String;$1;$Return_Value)
> >C_LONGINT($wanted;$2;$i;$Found)
> >C_TEXT($Search;$3)
> >C_POINTER($4;$Truncate)
> >
> >$String:=$1  //string/text to be searched
> >$Wanted:=$2  //the number of times to find the character in the
> >incomming string
> >
> >If (Count parameters=2)  //if this is looking just for tabs
> >$Search:=<>x_Tab
> >Else   //assign passed string
> >$Search:=$3
> >End if
> >
> >If (Count parameters=4)  //we want to destructively parse the incomming
> >string
> >$Truncate:=$4  //pointer to value to truncate
> >End if
> >
> >If ($Wanted>0) & ($String#"")  //if the number wanted is > 0 find
> >instance
> >
> >For ($i;1;$Wanted)
> >$Found:=utl_text_Position ($Search;$String)  //locate next instance of
> >character
> >
> >Case of
> >: ($i<$Wanted) & ($Found>0)  //if the number of char wanted is not yet
> >reached
> >$String:=Substring($String;$Found+1)
> >
> >: ($Wanted=$i) & ($Found>0)  //instance found
> >$Return_Value:=Substring($String;1;$Found-1)
> >
> >If (Count parameters=4)  //truncation was asked for, remove the
> >returned string (and everyhting before it)
> >$Truncate->:=Substring($String;$Found+Length($Search))  //replace the
> >incomming string with the truncated version (found removed)
> >End if
> >
> >: ($Found=0)  //no more instances
> >$i:=$Wanted+1  //end loop
> >$Return_Value:=$String
> >
> >If (Count parameters=4)
> >$Truncate->:=""  //replace the incomming string with empty string
> >End if
> >End case
> >End for
> >Else   //else # wanted <= zero return empty string
> >$Return_Value:=""
> >End if
> >$0:=$Return_Value
> >  //
> >**********************************************************************
> >4D Internet Users Group (4D iNUG)
> >FAQ:  http://lists.4d.com/faqnug.html
> >Archive:  http://lists.4d.com/archives.html
> >Options: http://lists.4d.com/mailman/options/4d_tech
> >Unsub:  mailto:[email protected]
> >**********************************************************************
>
> **********************************************************************
> 4D Internet Users Group (4D iNUG)
> FAQ:  http://lists.4d.com/faqnug.html
> Archive:  http://lists.4d.com/archives.html
> Options: http://lists.4d.com/mailman/options/4d_tech
> Unsub:  mailto:[email protected]
> **********************************************************************
>
**********************************************************************
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[email protected]
**********************************************************************

Reply via email to