I can't help you with the CFFILE issue (though you could probably implement
it in java without great difficulty), but it seems that converting the file
to an array would get around your issues with line pointers.  You can add or
remove lines in the middle, keep track of where you are in the file, and do
arbitrary reads and skips at any point.  I don't know what the overhead of
that would be, but I'd imagine it wouldn't be any slower than the loop.

Cheers,
barneyb

> -----Original Message-----
> From: Dick Applebaum [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, June 15, 2004 5:45 PM
> To: CF-Talk
> Subject: Re: Out of Memory Error Transforming large XML file.
>
> I finally chose to parse it myself, recoding existing Perl routines
> into CFMX scripts.
>
> So far it looks promising -- Most Perl structure, syntax & RegExps
> convert quite easily to CFScript.
>
> There are still a few disadvantages to CFMX over Perl
>
> 1) CF lacks a file readLn (readLine), so you must read in the entire
> file into memory.  You then can approximate a Perl chomp
> (readLn) by CF
> list-looping over the file with a newline delimiter.  Note:  Using CF
> list-looping presents the next line with each iteration and performs
> well (ListGetAt() is too slow to be acceptable).
>
> 2) Perl maintains a pointer to the current line position in a
>  file --
> this means you can chomp (readLn) the file in subroutines,
> then return
> to the caller with the current line positioned where the subroutine
> left it.  CF list-looping has no similar construct, nor the
> ability to
> list-loop from-to -- this means that the logic of the main
> routine gets
> more complex and there is more main-subroutine overhead.
>
> For example the xml file is divided into two major sections:  tracks
> followed by playlists.
>
> The Perl program chomps till it finds the first track
> ----passes control to a get_tracks subroutine
> ------subroutine chomps tracks until first play list, then returns
> Main program passes control to get_playlists subroutine
> ------subroutine chomps playlists until EOF, then returns
> Main program continues
>
> In the CF program
>
> Main Program loops over the list line by line.
> if found first track and not first playlist
> ---call get_tracks sub to process this track (line) only & return
> if found  first playlist
> ---call get_playlist sub to process this playlist (line) only & return
> Main program continues
>
> As you can see, there is additional  testing and call
> overhead for each
> line in the CF solution -- all because CF can't readLn a file nor
> manipulate the list-loop position in a subroutine.
>
> For the latter I would like to see CFML improved to include:
> 1) an implied list  pointer for each list loop:
> 1) , ListGetFirst, ListGetLast, ListGetAt functions that
> reposition the
> list pointer
>
> Also  cf list-loop  with from  and to parameters
>
> Also CFFile readln
>
> Dick
[Todays Threads] [This Message] [Subscription] [Fast Unsubscribe] [User Settings]

Reply via email to