【发布时间】:2014-03-13 05:46:48
【问题描述】:
我是 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);
但我总是不确定。
接下来我尝试的是:(感谢Andrey Sidorov's post)
function get_line_count(file) {
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;
});
}
var file1_lines = get_line_count('test.txt');
console.log(file1_lines);
但我得到了相同的结果。不明确的。
我还不习惯节点,所以任何帮助都会很棒!谢谢!
更新
行数现在似乎可以工作,但我仍然无法编写比较两者的函数。
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));
这总是返回 true...
【问题讨论】:
-
你应该阅读回调/异步执行:stackoverflow.com/a/4506306/3263412
-
是的,我不习惯它的工作方式。感谢您的链接,我会在尝试解决这个问题时检查它。对我的功能有什么建议吗?我错过了什么?
标签: javascript node.js