When you think ASP, think...
Recent Articles
All Articles
ASP.NET Articles [1.x] [2.0]
ASPFAQs.com
Message Board
Related Web Technologies
User Tips!
Coding Tips
Search

Sections:
Book Reviews
Sample Chapters
Commonly Asked Message Board Questions
Headlines from ASPWire.com
JavaScript Tutorials
MSDN Communities Hub
Official Docs
Security
Stump the SQL Guru!
Web Hosts
XML Info
Information:
Advertise
Feedback
Author an Article
Technology Jobs

















internet.com
IT
Developer
Internet News
Small Business
Personal Technology
International

Search internet.com
Advertise
Corporate Info
Newsletters
Tech Jobs
E-mail Offers
ASP ASP.NET ASP FAQs Message Board Feedback ASP Jobs
Print this page.

Windows Systems Administrator
Jupitermedia
US-CT-Darien

Justtechjobs.com Post A Job | Post A Resume

User Tips: Reading a File into an Array


This tip comes from Rafeeq

I was in search of an array function like the one below for ASP (being so lazy!), but I couldn't find one... so I decided to create my own! This function reads a file line by line and stores each line a dynamic array. First two object varibles - fso (file system object) and ts (textfileobject) - are created.

Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(filename, ForReading)

Then I declared an array using ReDim statement with the size set one.

reDim myarray(0)

Now as long as I read from the file, I change the size of the array dynamically without destroying the previous elements and copy the current line read to the current array element.

		
While not ts.AtEndOfStream
   i=i+1
	
   Redim Preserve myarray(i)
   myarray(i)=ts.ReadLine
Wend			

The final statement returns the myarray object from function File(filename). Here's the entire source code listing:

		
<%
'  //////////////////////////////////////////////////////////////////
'  //
'  // This function is a replica of PHP's "array file(filename)"
'  //
'  // Author Rafeeq C E	email:rafeeqce@myiris.com
'  // Wrote on 14-10-2000 during ---- Project
'  //
'  // Example: myarray=file("c:\mysongs.list")
'  //
'  //////////////////////////////////////////////////////////////////

  Function File(filename)	
    Dim fso,ts, myarray

    Const ForReading = 1
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile(filename, ForReading)

    reDim myarray(0)	

    i=-1

    While not ts.AtEndOfStream
      i=i+1
	
      Redim Preserve myarray(i)
      myarray(i)=ts.ReadLine
    Wend

    ts.Close
    File=myarray
  End Function
%>

Cool Na! If you've trouble using this code (not for commercial purpose) feel free to drop a line at rafeeqce@myiris.com! (For more information on using the FileSystemObject, see the following FAQ: What is the FileSystemObject? For more information on resizing arrays, be sure to visit the FAQ: How can I dynamically resize an array?)


Comment from Bill Wilkinson
For large text files the above script is going to have horrible performance, doing the ReDim Preserve on every line!

*SO* much better to do:

		
<%
..
ReDim ar(1000)
Count = -1
..
Do Until...
 Count = Count + 1
 If Count > UBound(ar) Then ReDim Preserve ar(Count+1000)
 ar(Count) = theFile.readLine
Loop

' optional, if you want array exactly right size
ReDim Preserve ar(Count)
%>

But ReDim Preserve on each line??? Each empty element of an array only eats up 16 bytes of memory, so if the file turned out to have only 1 line, we are only wasting 16,000 bytes of memory. And even then we only waste it long enough to run through the loop. We only have to do a ReDim Preserve -- which is a VERY expensive operation in terms of time it takes and memory it uses! -- once every 1,000 lines (plus once more at the very end). If you had 1,300 lines in your file, you just save 1,298 ReDim Preserve calls! A huge performance advantage!


Thanks for the comment, Bill! :-)

Happy Programming!

Return to user tips...


Windows Internet Technology | ASP.NET [1.x] [2.0] | ASPMessageboard.com | ASPFAQs.com | Advertise | Feedback | Author an Article



JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

Solutions
Whitepapers and eBooks
Microsoft Article: HyperV-The Killer Feature in WinServer ‘08
Avaya Article: How to Feed Data into the Avaya Event Processor
Microsoft Article: Install What You Need with Win Server ‘08
HP eBook: Putting the Green into IT
Whitepaper: HP Integrated Citrix XenServer for HP ProLiant Servers
Intel Go Parallel Portal: Interview with C++ Guru Herb Sutter, Part 1
Intel Go Parallel Portal: Interview with C++ Guru Herb Sutter, Part 2--The Future of Concurrency
Avaya Article: Setting Up a SIP A/S Development Environment
IBM Article: How Cool Is Your Data Center?
Microsoft Article: Managing Virtual Machines with Microsoft System Center
HP eBook: Storage Networking , Part 1
Microsoft Article: Solving Data Center Complexity with Microsoft System Center Configuration Manager 2007
MORE WHITEPAPERS, EBOOKS, AND ARTICLES
Webcasts
Intel Video: Are Multi-core Processors Here to Stay?
On-Demand Webcast: Five Virtualization Trends to Watch
HP Video: Page Cost Calculator
Intel Video: APIs for Parallel Programming
HP Webcast: Storage Is Changing Fast - Be Ready or Be Left Behind
Microsoft Silverlight Video: Creating Fading Controls with Expression Design and Expression Blend 2
MORE WEBCASTS, PODCASTS, AND VIDEOS
Downloads and eKits
Sun Download: Solaris 8 Migration Assistant
Sybase Download: SQL Anywhere Developer Edition
Red Gate Download: SQL Backup Pro and free DBA Best Practices eBook
Red Gate Download: SQL Compare Pro 6
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
How-to-Article: Preparing for Hyper-Threading Technology and Dual Core Technology
eTouch PDF: Conquering the Tyranny of E-Mail and Word Processors
IBM Article: Collaborating in the High-Performance Workplace
HP Demo: StorageWorks EVA4400
Intel Featured Algorhythm: Intel Threading Building Blocks--The Pipeline Class
Microsoft How-to Article: Get Going with Silverlight and Windows Live
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES