Javascript nodejs文件行计数返回未定义
我是node.js的新手,请耐心等待。我需要一个返回文件行长度的函数。 我希望做一些类似的事情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),但是生成子实例有点复杂。我不知道如何将变
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关于闭包和回调的更多信息:您应该仔细阅读回调/异步执行:耶,我不习惯它是如何工作的。谢谢你的链接,我会在尝试解决这个问题时查看它。对我的工作有什么建议吗?我遗漏了什么?你应该仔细阅读回调/异步执行:是的,我不习惯它的工作方式。谢谢你的链接,我会在尝试解决这个问题时查看它。有什么建议吗