2012-06-02 4 views
17

Ich habe Javascript nie verwendet, um eine Datei Zeile für Zeile zu lesen, und Phantomjs ist ein ganz neues Ballspiel für mich. Ich weiß, dass es eine read() - Funktion in Phantom gibt, aber ich bin mir nicht ganz sicher, wie man die Daten manipuliert, nachdem sie in einer Variablen gespeichert wurden. Mein Pseudo-Code ist so etwas wie:phantomjs Javascript eine lokale Datei Zeile für Zeile lesen

filedata = read('test.txt'); 
newdata = split(filedata, "\n"); 
foreach(newdata as nd) { 

    //do stuff here with the line 

} 

Wenn jemand mir bitte mit echten Code-Syntax helfen könnte, ich bin ein wenig verwirrt darüber, ob oder nicht PhantomJS typische Javascript akzeptiert oder was.

Antwort

27

Ich bin kein JavaScript oder PhantomJS Experte, aber der folgende Code funktioniert für mich:

/*jslint indent: 4*/ 
/*globals document, phantom*/ 
'use strict'; 

var fs = require('fs'), 
    system = require('system'); 

if (system.args.length < 2) { 
    console.log("Usage: readFile.js FILE"); 
    phantom.exit(1); 
} 

var content = '', 
    f = null, 
    lines = null, 
    eol = system.os.name == 'windows' ? "\r\n" : "\n"; 

try { 
    f = fs.open(system.args[1], "r"); 
    content = f.read(); 
} catch (e) { 
    console.log(e); 
} 

if (f) { 
    f.close(); 
} 

if (content) { 
    lines = content.split(eol); 
    for (var i = 0, len = lines.length; i < len; i++) { 
     console.log(lines[i]); 
    } 
} 

phantom.exit(); 
5

Obwohl zu spät, hier ist das, was ich versucht habe, und arbeitet:

var fs = require('fs'), 
    filedata = fs.read('test.txt'), // read the file into a single string 
    arrdata = filedata.split(/[\r\n]/); // split the string on newline and store in array 

// iterate through array 
for(var i=0; i < arrdata.length; i++) { 

    // show each line 
    console.log("** " + arrdata[i]); 

    //do stuff here with the line 
} 

phantom.exit(); 
+0

Dies ist sinnvoll, wenn die gesamte Datei für den nächsten Prozess benötigt wird. Ansonsten ist es keine gute Idee, die ganze Datei zu lesen (besonders wenn die Eingabedatei groß ist) –

21
var fs = require('fs'); 
var file_h = fs.open('rim_details.csv', 'r'); 
var line = file_h.readLine(); 

while(line) { 
    console.log(line); 
    line = file_h.readLine(); 
} 

file_h.close(); 
+0

Die bessere Antwort hier, IMO, da sie die eingebaute readLine() Funktion verwendet; keine Notwendigkeit, etwas Brauchbares zu tun. –

+2

Einverstanden, das ist die bessere Antwort. Ich würde vorschlagen, die Antwort zu optimieren, um file_h..atEnd() als Schleifenbedingung zu verwenden. Siehe http://phantomjs.org/api/stream/method/read-line.html –

+1

Ich habe diese Version versucht, aber es scheint, dass readLine() -Methode veraltet ist: https://nodejs.org/api/fs.html# fs_fs_open_path_flags_mode_callback – alemol