使用 Node.js' fs.readFile() 到 return 出现字符串的行
Use Node.js' fs.readFile() to return the line in which a string appears
我正在一个大型的 n-gram 外部文件(大约 100 万行)中搜索特定字符串的实例,并且希望能够 return 该字符串所在文件中的整行出现。想知道这是否可能以及如何可能。
这是我目前的代码:
composeLines = function(importantWords, cb) {
var word = importantWords.shift();
fs.readFile("./w5_.txt", function(err, cont) {
if (err) throw err;
console.log("String"+(cont.indexOf(word)>-1 ? " " : " not ")+"found");
cb(importantWords);
});
};
使用此代码,我可以确定文件 w5_.txt
是否包含一些很棒的字符串,但我需要能够获得它所属的 n-gram。例如。搜索 "design" 会 return 来自文件的 n-gram "a part of the design"。
如有任何帮助,我们将不胜感激。
一种选择是使用正则表达式:
// Make sure `word` is properly escaped first
// 'm' allows '^' and '$' to match line boundaries or
// start and beginning of the input (respectively)
var re = new RegExp('^.*' + word + '.*$', 'm');
var m = re.exec(cont);
if (m)
console.log('Word %j found on line: %j', word, m[0]);
else
console.log('Word %j not found', word);
既然有数百万行,你应该像这样逐行阅读:
var word = importantWords.shift();
var matchCount = 0;
var lineCount = 0;
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('file.in')
});
lineReader.on('line', function (line) {
lineCount++;
if(-1 < line.indexOf(word)){
console.log(line);
matchCount++;
}
});
我正在一个大型的 n-gram 外部文件(大约 100 万行)中搜索特定字符串的实例,并且希望能够 return 该字符串所在文件中的整行出现。想知道这是否可能以及如何可能。 这是我目前的代码:
composeLines = function(importantWords, cb) {
var word = importantWords.shift();
fs.readFile("./w5_.txt", function(err, cont) {
if (err) throw err;
console.log("String"+(cont.indexOf(word)>-1 ? " " : " not ")+"found");
cb(importantWords);
});
};
使用此代码,我可以确定文件 w5_.txt
是否包含一些很棒的字符串,但我需要能够获得它所属的 n-gram。例如。搜索 "design" 会 return 来自文件的 n-gram "a part of the design"。
如有任何帮助,我们将不胜感激。
一种选择是使用正则表达式:
// Make sure `word` is properly escaped first
// 'm' allows '^' and '$' to match line boundaries or
// start and beginning of the input (respectively)
var re = new RegExp('^.*' + word + '.*$', 'm');
var m = re.exec(cont);
if (m)
console.log('Word %j found on line: %j', word, m[0]);
else
console.log('Word %j not found', word);
既然有数百万行,你应该像这样逐行阅读:
var word = importantWords.shift();
var matchCount = 0;
var lineCount = 0;
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('file.in')
});
lineReader.on('line', function (line) {
lineCount++;
if(-1 < line.indexOf(word)){
console.log(line);
matchCount++;
}
});