NodeJS,fs.readFileSync逐字符串读取和操作。怎么样?

时间:2016-03-28 18:07:34

标签: node.js selenium browserstack

抱歉这么愚蠢的问题,

我如何在NodeJS中通过字符串读取文件字符串的某些值,例如 - url,并最终对每个字符串进行操作?

var contents = fs.readFileSync('test.txt', 'utf8');

然后呢?

需要进行browserstack + selenium测试。 我想从文件中逐个运行一些链接并对它们做一些事情。

以下更改的代码: 来自

console.log(lines[i++])

line = (lines[i++])
driver.get(line);
driver.getCurrentUrl()
                .then(function(currentUrl) {
                   console.log(currentUrl);

但它只运作一次。

并且

var str=fs.readFileSync('test.txt');
str.split(/\n/).forEach(function(line){})


C:\nodejstest>node test1.js
C:\nodejstest\test1.js:57
str.split(/\n/).forEach(function(line){
    ^

TypeError: str.split is not a function
    at Object.<anonymous> (C:\nodejstest\test1.js:57:5)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:142:18)
    at node.js:939:3

作品! 不仅仅是啊!

2 个答案:

答案 0 :(得分:8)

另一种(更简单的)方法是将整个文件读入缓冲区,将其转换为字符串,在行终止符上拆分字符串以生成行数组,然后遍历数组,如下所示:

var buf=fs.readFileSync(filepath);

buf.toString().split(/\n/).forEach(function(line){
  // do something here with each line
});

答案 1 :(得分:0)

使用可读流读取文件,并在找到'\n'时执行操作。

var fs=require('fs');
var readable = fs.createReadStream("data.txt", {
    encoding: 'utf8',
    fd: null
});
var lines=[];//this is array not a string!!!
readable.on('readable', function() {
    var chunk,tmp='';
    while (null !== (chunk = readable.read(1))) {
        if(chunk==='\n'){
            lines.push(tmp);
            tmp='';
        //    this is how i store each line in lines array
        }else
            tmp+=chunk;
    }
});
// readable.on('end',function(){
//     console.log(lines);    
// });
readable.on('end',function(){
    var i=0,len=lines.length;
    //lines is #array not string
    while(i<len)
        console.log(lines[i++]);
});

看看它是否适合你。