When I'm building files, I usually use build up a string/array (depending on
the situation) in memory, and then flush it to the file periodically,
because string concatenation gets expensive as the string gets large. This
example (a horribly contrived one) uses the string concatenation method, and
has code to use the array append method commented out for illustrative
purposes. I didn't test, so it may not be perfect, but it should be close.
<cfset filename = expandPath('./data_file.txt') /> <!--- data file --->
<cfset s = "" /> <!--- temp variable --->
<!---
<cfset a = arrayNew(1) />
--->
<cfset flush_frequency = 50 /> <!--- how often to flush to file --->
<cfloop query="get">
<cfset s = s & "name: #name#, dob: #dateOfBirth#" />
<!---
<cfset arrayAppend(a, "name: #name#, dob: #dateOfBirth#") />
--->
<cfif month(dateOfBirth) EQ month(now()) and day(dateOfBirth) EQ
day(now())>
<cfset s = s & " happy birthday!" />
<!---
<cfset a[arrayLen(a)] = a[arrayLen(a)] & " happy birthday" />
--->
</cfif>
<cfif currentrow MOD flush_frequency EQ 0>
<cffile action="append"
file="#filename#"
output="#s#" />
<cfset s = "" />
<!---
<cffile action="append"
file="#filename#"
output="#arrayToList(a, chr(10))##chr(10)#" />
<cfset a = arrayNew(1) />
--->
</cfif>
</cfloop>
<cffile action="append"
file="#filename#"
output="#s#" />
<!---
<cffile action="append"
file="#filename#"
output="#arrayToList(a, chr(10))#" />
--->
I haven't done any formal performance testing, but it's not noticably
differe for small data sets, and noticably faster for large data sets. Just
don't forget that <cfset s = "" /> after the flush, or you'll kick your
server's ass, trust me. ; )
HTH,
barneyb
---
Barney Boisvert, Senior Development Engineer
AudienceCentral
[EMAIL PROTECTED]
voice : 360.756.8080 x12
fax : 360.647.5351
www.audiencecentral.com
> -----Original Message-----
> From: James Blaha [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, July 01, 2003 10:05 AM
> To: CF-Talk
> Subject: best practice for building a large text file?
>
>
> All:
>
> What�s the best practice for building a large text file? Is it better to
> use CFFILE and APPLEND or use an array then once you have the
> information use arraytolist and then use CFFILE to create the text file?
>
> I have a 30 meg text file that I�m building line by line.
>
> Regards,
> James Blaha
>
>
>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Archives: http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4
Subscription:
http://www.houseoffusion.com/cf_lists/index.cfm?method=subscribe&forumid=4
FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
Your ad could be here. Monies from ads go to support these lists and provide more
resources for the community.
http://www.fusionauthority.com/ads.cfm
Unsubscribe:
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4