www.webdeveloper.com
Results 1 to 8 of 8

Thread: How to read a text file

  1. #1
    Join Date
    May 2014
    Posts
    3

    How to read a text file

    Can someone please help me figure out how to write a script that will read a text file that contains a large amount of integers and put them into an array? I want to put the integers into an array so that I can merge sort and count the inversions within the array. I will be using node.js to execute the file.

    Thanks!

  2. #2
    Join Date
    Mar 2009
    Posts
    512
    Assumming a text file like:

    "14,2, 5, 6, 19, 106" where its separated by commas:

    Code:
    var fs, file, arr, i, len;
    fs = require('fs');
    //get file and load layer--change to proper path as needed
    file = fs.readFileSync('myFile.txt','utf-8');  //synchronous file read
    
    arr = file.split(',');   //split by commas
    
    //turn into integers
    
    len = arr.length;
    for(i = 0; i < len; i++){
       arr[i] = parseInt(arr[i]);
    }
    
    //its done-- you have an array of integers from the file

  3. #3
    Join Date
    May 2014
    Posts
    3
    I forgot to say that the text file is more like:

    14
    2
    5
    6
    19
    106

    so no commas or anything

  4. #4
    Join Date
    Dec 2002
    Location
    Seattle, WA
    Posts
    1,843
    depending on the system or program that saved the file and/or the system that is serving the file, the line ending may be different (CR "\r", LF "\n", windows uses CRLF, linux uses LF, and macintosh uses CR). Do a simple sanitizing on it first.
    Code:
    var text; // the data from the file
    text = text.replace(/(?:\r\n|\r)+/g, "\n");
    //text = text.replace(/(?:^\n|\n$|\s+)/g, ''); // if you need remove all white-space
    // split into an array...
    text = text.split("\n");
    
    /* you could also typecast the values of the array if needed
    for (var i = 0, l = text.length; i < l; ++i) {
        text[i] = Number(text[i]); // vale is now a number or NaN (not an number)
    }*/
    console.log(text); // should print an array of numbers as intended
    Last edited by ShrineDesigns; 05-07-2014 at 06:57 PM.

  5. #5
    Join Date
    Mar 2009
    Posts
    512
    You can try this instead then:

    Code:
    var fs, file, arr, i, len, multi, val;
    	fs = require('fs');
    	//get file and load layer--change to proper path as needed
    	file = fs.readFileSync('myFile.txt','utf-8');  //synchronous file read
    
    	//the mess that follows is because I don't know what kind of line
    	//breaks are used--UNIX, Mac, or MS --convert to UNIX
    	multi = "\n\n";
    	file = file.replace(/\r/g,"\n");
    	while(file.indexOf(multi) != -1){
    	file = file.replace(/\n\n/g,"\n");
    	}
    	//we can now split it
    	arr = file.split("\n");
    	//we still have a potential problem with empty elements, so ...
    	len = arr.length;
    	for(i = 0; i < len; i++){
    	    val = arr.shift();  //chop off first element of array
    	    if(val.length > 0){ //stick it back on if its not blank
    		val = parseInt(val);
    		arr.push(val);
    	    }
    	}
    
    	// arr should now be your array of integers

  6. #6
    Join Date
    May 2014
    Posts
    3
    Quote Originally Posted by Tcobb View Post
    You can try this instead then:

    Code:
    var fs, file, arr, i, len, multi, val;
    	fs = require('fs');
    	//get file and load layer--change to proper path as needed
    	file = fs.readFileSync('myFile.txt','utf-8');  //synchronous file read
    
    	//the mess that follows is because I don't know what kind of line
    	//breaks are used--UNIX, Mac, or MS --convert to UNIX
    	multi = "\n\n";
    	file = file.replace(/\r/g,"\n");
    	while(file.indexOf(multi) != -1){
    	file = file.replace(/\n\n/g,"\n");
    	}
    	//we can now split it
    	arr = file.split("\n");
    	//we still have a potential problem with empty elements, so ...
    	len = arr.length;
    	for(i = 0; i < len; i++){
    	    val = arr.shift();  //chop off first element of array
    	    if(val.length > 0){ //stick it back on if its not blank
    		val = parseInt(val);
    		arr.push(val);
    	    }
    	}
    
    	// arr should now be your array of integers
    Thanks Tcobb! This works

  7. #7
    Join Date
    Mar 2009
    Posts
    512
    You are welcome. I hope you enjoy messing around with node.js. You can do some really amazing things with it.

  8. #8
    Join Date
    Jan 2014
    Posts
    49
    notepad is best

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles