Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript nodejs文件行计数返回未定义_Javascript_Node.js - Fatal编程技术网

Javascript nodejs文件行计数返回未定义

Javascript nodejs文件行计数返回未定义,javascript,node.js,Javascript,Node.js,我是node.js的新手,请耐心等待。我需要一个返回文件行长度的函数。 我希望做一些类似的事情 file1 = line_length_func('file'); file2 = line_length_function('file'); if (file1 === file2) { console.log('same number of lines!');} 我一直在研究各种方法来实现这一点,使用child.exec(cat file | wc-l),但是生成子实例有点复杂。我不知道如何将变

我是node.js的新手,请耐心等待。我需要一个返回文件行长度的函数。 我希望做一些类似的事情

file1 = line_length_func('file');
file2 = line_length_function('file');
if (file1 === file2) { console.log('same number of lines!');}
我一直在研究各种方法来实现这一点,使用child.exec(cat file | wc-l),但是生成子实例有点复杂。我不知道如何将变量从我的孩子传递给父母,或者这样做是否是一种好的做法

所以我尝试了这个-我看到fs.open的fd返回了行数:

function get_lines(file) {
    var lines = fs.open(file, 'r', function(err, fd) {
        var lines = fd;
    });
}

a = get_lines('file.txt');
console.log(a);
但我一直没有定义

接下来我尝试的是:(感谢)

函数获取行数(文件){
var计数=0;
fs.createReadStream(文件)
.on('data',函数(块){
对于(var i=0;i
但我得到了同样的结果。未定义

我还不习惯节点,所以任何帮助都会很好!谢谢

更新

行计数现在似乎可以工作了,但我仍然无法编写一个函数来比较两者

function get_line_count(file, cb) {
    var count = 0;
    fs.createReadStream(file)
        .on('data', function(chunk) {
            for (var i = 0; i < chunk.length; i++)
                if (chunk[i] == 10) count++;
        })
        .on('end', function() {
            cb(null, count);
        })
        .once('error', cb);
}

var file1 = get_line_count('test.txt', function(err, lines) {
    if (err) return; // todo
    return lines;
});

var file2 = get_line_count('test2.txt', function(err, lines) {
    if (err) return; //todo
    return lines;
});

function same_line_length(len1, len2) {
    return len1===len2;
}

console.log(same_line_length(file1, file2));
函数获取行计数(文件,cb){
var计数=0;
fs.createReadStream(文件)
.on('data',函数(块){
对于(var i=0;i

这总是返回true…

在函数
获取行计数(文件)
中,
返回计数
用于匿名函数('end'事件处理程序),而不是
获取行计数()
。因此调用
get\u line\u count()
将返回undefined

假设您有一个需要知道行数的函数:

function doSomething(count) {
  //your code
}
get\u line\u count
的定义更改为:

function get_line_count(file, cb) {
  var count = 0;
  fs.createReadStream(file)
    .on('data', function(chunk) {
        for (var i = 0; i < chunk.length; i++)
            if (chunk[i] == 10) count++;
    })
    .on('end', function() {
        // return count;
        cb(count);
    });
}

在函数
get\u line\u count(file)
中,
return count
用于匿名函数('end'事件处理程序),而不是
get\u line\u count()
。因此调用
get\u line\u count()
将返回undefined

假设您有一个需要知道行数的函数:

function doSomething(count) {
  //your code
}
get\u line\u count
的定义更改为:

function get_line_count(file, cb) {
  var count = 0;
  fs.createReadStream(file)
    .on('data', function(chunk) {
        for (var i = 0; i < chunk.length; i++)
            if (chunk[i] == 10) count++;
    })
    .on('end', function() {
        // return count;
        cb(count);
    });
}
您的“get_line_count”在文件读取操作开始之前就完成了。它是异步的IO,如果它可以帮助命名你的函数“StaskFieleLeNeCuNtTo序列(name,OnNo完成)”-该函数将一些请求放入队列和退出(几乎立即),并且在稍后的某个时间点从事件循环调用处理程序。
function get_line_count(file, cb) {
    var count = 0;
    fs.createReadStream(file)
        .on('data', function(chunk) {
            for (var i = 0; i < chunk.length; i++)
                if (chunk[i] == 10) count++;
        })
        .on('end', function() {
            cb(null, count)
        })
        .once('error', cb);
}

get_line_count('test.txt', console.log);
函数获取行计数(文件,cb){
var计数=0;
fs.createReadStream(文件)
.on('data',函数(块){
对于(var i=0;i
您的“获取行数”在文件读取操作开始之前就完成了。它是异步的IO,如果它可以帮助命名你的函数“StaskFieleLeNeCuNtTo序列(name,OnNo完成)”-该函数将一些请求放入队列和退出(几乎立即),并且在稍后的某个时间点从事件循环调用处理程序。
function get_line_count(file, cb) {
    var count = 0;
    fs.createReadStream(file)
        .on('data', function(chunk) {
            for (var i = 0; i < chunk.length; i++)
                if (chunk[i] == 10) count++;
        })
        .on('end', function() {
            cb(null, count)
        })
        .once('error', cb);
}

get_line_count('test.txt', console.log);
函数获取行计数(文件,cb){
var计数=0;
fs.createReadStream(文件)
.on('data',函数(块){
对于(var i=0;i
您尝试使用异步核心方法的两个函数:
fs.createReadStream
fs.open
。要从这些函数中获得结果,必须传入回调,如下所示:

get_line_count(file, doSomething);
function getLineCount(file, cb) {
    var count = 0;

    fs.createReadStream(file)
      .on('data', function(chunk) {
        for (var i = 0; i < chunk.length; i++)
        if (chunk[i] == 10) count++;
      })
      .once('error', cb)
      .on('end', function() {
        cb(null, count);
      });
}


getLineCount('example.txt', function(err, count) {
    if (err) return err; // do something about the error
    console.log(count);
});
函数getLineCount(文件,cb){ var计数=0; fs.createReadStream(文件) .on('data',函数(块){ 对于(var i=0;i
有关闭包和回调的详细信息:

您尝试使用异步核心方法的两个函数:
fs.createReadStream
fs.open
。要从这些函数中获得结果,必须传入回调,如下所示:

get_line_count(file, doSomething);
function getLineCount(file, cb) {
    var count = 0;

    fs.createReadStream(file)
      .on('data', function(chunk) {
        for (var i = 0; i < chunk.length; i++)
        if (chunk[i] == 10) count++;
      })
      .once('error', cb)
      .on('end', function() {
        cb(null, count);
      });
}


getLineCount('example.txt', function(err, count) {
    if (err) return err; // do something about the error
    console.log(count);
});
函数getLineCount(文件,cb){ var计数=0; fs.createReadStream(文件) .on('data',函数(块){ 对于(var i=0;i
关于闭包和回调的更多信息:

您应该仔细阅读回调/异步执行:耶,我不习惯它是如何工作的。谢谢你的链接,我会在尝试解决这个问题时查看它。对我的工作有什么建议吗?我遗漏了什么?你应该仔细阅读回调/异步执行:是的,我不习惯它的工作方式。谢谢你的链接,我会在尝试解决这个问题时查看它。有什么建议吗