phantomjs javascript читает локальный файл построчно

Я никогда не использовал javascript для чтения файла построчно, и phantomjs — это совершенно новая игра для меня. я знаю, что в фантоме есть функция read(), но я не совсем уверен, как манипулировать данными после их сохранения в переменной. Мой псевдокод выглядит примерно так:

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

  //do stuff here with the line

}

Если кто-нибудь может помочь мне с синтаксисом реального кода, я немного смущен тем, будут ли фантомы принимать типичный javascript или что.


person zoltar    schedule 02.06.2012    source источник


Ответы (3)


Я не эксперт по JavaScript или PhantomJS, но у меня работает следующий код:

/*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();
person Darius Kucinskas    schedule 01.08.2012

Хотя уже слишком поздно, вот что я пробовал и работает:

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();
person sudipto    schedule 04.05.2013
comment
Это хорошо, если для следующего процесса требуется весь файл. В противном случае не рекомендуется читать весь файл (особенно если входной файл большой). - person Kishore Relangi; 02.04.2014

person    schedule
comment
Лучший ответ здесь, IMO, поскольку он использует встроенную функцию readLine(); не нужно ничего делать на заказ. - person Craig Sefton; 14.03.2014
comment
Согласен, это лучший ответ. Однако я бы предложил изменить ответ, чтобы использовать file_h.atEnd() в качестве условия цикла. См. phantomjs.org/api/stream/method/read-line.html - person Aaron Bruce; 11.04.2014
comment
отличные идеи @Kishore Relangi - person gumuruh; 18.07.2016