functionTrieTree() { this.root = new TreeNode(null); };
TrieTree.prototype.push = function (str) { var p = this.root; for (var i = 0; i < str.length; i++) { pChildren = p.children; // 逐个孩子遍历,看看有没有str[i]匹配的树枝 for (var j = 0; j < pChildren.length; j++) { if (pChildren[j].ch === str[i]) { if (i === str.length - 1) p.children[j].flag = true; p = p.children[j]; break; } } if (j === pChildren.length) break; } for (; i < str.length; i++) { var newChild = new TreeNode(str[i]); if (i === str.length - 1) newChild.flag = true; p.children.push(newChild); p = newChild; } };
TrieTree.prototype.search = function (str) { var p = this.root; var flag = false; for (var i = 0; i < str.length; i++) { pChildren = p.children; for (var j = 0; j < pChildren.length; j++) { if (pChildren[j].ch === str[i]) { if (pChildren[j].flag) flag = true; p = p.children[j]; break; } } if (j === pChildren.length) break; } if (i === str.length && flag) returntrue; elsereturnfalse; };
var trieTree = new TrieTree();
// 读取B,建立字典 var fs = require('fs'); var contentB = fs.readFileSync('./B.csv','utf-8'); var linesB = contentB.split('rn'); for (var i = 0 ; i < linesB.length; i++) { trieTree.push(linesB[i]); }
// 搜索A中的记录 var writeStream = fs.createWriteStream('./ans.csv'); var contentA = fs.readFileSync('./A.csv','utf-8'); var linesA = contentA.split('rn'); for (var i = 0 ; i < linesA.length; i++) { if(trieTree.search(linesA[i])) { writeStream.write(linesA[i]+','+'line:'+(i+1)+'rn', "utf-8"); } } writeStream.end();