[futurebasic] Re: Parsing

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : November 1997 : Group Archive : Group : All Groups

From: tedd <sperling@...>
Date: Fri, 28 Nov 1997 19:28:10 -0500
>I need my program to parse some fairly sizable text based files.  The file
>specification is quite loose, however, so I can't know exactly where each
>element of the file will be.  What I'm looking for is a fast way to locate,
>for example, the first character in the handle that is NOT a white space
>(CHR's 9 through 13) or the first character that IS the start of a
>subsection: ({[< and such.  I'm using some FN MUNGER code that was posted
>here a while back for most of my parsing, but I haven't found a way to do
>this with that yet.
>
>While I'm at it, if anyone knows a way to search for a string that is not
>within a subsection (a pair of the above characters: {}, (), etc.) I'd
>appreciate hearing that, as well.  My current solution is to search for the
>string, and then search for the start and end of the subsections leading up
>to the string and making sure that the last subsection ends before the
>string begins.  It works, but it seems to me like there should be a faster
>method.
>
>Thanks in advance.
>
>-- Brian Victor


Brian:

I don't know about using MUNGER (I've never used it), but if I were to
parse a sizable text file, I would first open the text file and place it in
memory:

  OPEN "I",1,fileName$,,volRefNum%   'open file
  fileSize& = LOF (1,1)              'determine size of file
  gTextH& = FN NEWHANDLE(fileSize&)  'get memory allocation
  LONG IF gText& <> _nil
    osErr% = FN HLOCK(gTextH&)
    READ FILE #1, [gTextH&], fileSize&
    osErr% = FN HUNLOCK(gTextH&)
  XELSE
    osErr% = _mFulErr                'check for error
  END IF
  gOffSet& = 0

Then I would start at the beginning of the text file (i.e., gTextH&) and go
through it a byte at a time (INC(gOffSet&)) while evaluating "a" (ASCII):

   LOCAL FN readByte                 'read 1 byte
     DIM a
     a = PEEK ( [gTextH&] + gOffSet&)
     INC (gOffSet&)
   END FN = a

That would be pretty fast.

tedd

_____________________________________________________________________
tedd f. sperling                       <mailto:sperling@...>
                                     http://www.sojourn.com/sperling/