2012-06-02 31 views
17

Nunca he usado javascript para leer un archivo línea por línea, y phantomjs es un juego completamente nuevo para mí. Sé que hay una función de lectura() en Phantom, pero no estoy del todo seguro de cómo manipular los datos después de almacenarlos en una variable. Mi pseudocódigo es algo así como:phantomjs javascript leer un archivo local línea por línea

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

    //do stuff here with the line 

} 

Si alguien puede ayudarme por favor con la sintaxis de código real, estoy un poco confundido en cuanto a si o no PhantomJS aceptarán Javascript típica o qué.

Respuesta

27

No soy experto en JavaScript o PhantomJS pero el siguiente código funciona para mí:

/*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

Aunque demasiado tarde, aquí es lo que he tratado y está trabajando:

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

Esto es bueno si se requiere un archivo completo para el próximo proceso. De lo contrario, no es una buena idea leer todo el archivo (especialmente cuando el archivo de entrada es grande) –

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

La mejor respuesta aquí, IMO, ya que utiliza la función incorporada readLine(); no hay necesidad de hacer nada personalizado. –

+2

De acuerdo, esta es la mejor respuesta. Sin embargo, sugeriría ajustar la respuesta para usar file_h.atEnd() como la condición de bucle. Ver http://phantomjs.org/api/stream/method/read-line.html –

+1

Intenté esta versión, pero parece que el método readLine() está en desuso: https://nodejs.org/api/fs.html# fs_fs_open_path_flags_mode_callback – alemol

Cuestiones relacionadas