2015-12-2 11:09:30
实现了逐行读取文件,分析内容并把符合要求的内容写到另外一个文件中。
但是还是只实现了一半想要的功能。
最想要的功能是读取到指令超时记录的时候,再向上寻找到和这条记录对应的另外一行发指令的记录。
但是没有找到什么按行读取文件的方法,也就没法按照当前的行倒序向前读取去寻找对应的发指令记录。
想先把文件倒序来写到另外一个文件中,但是还是找不到在文件头附加新内容的方法,现有的方法都是在文件尾附加新内容。
如果发指令对应的采集器只有一个就好了,就可以从头开始寻找,虽然有点慢但还能找到。现在从头开始找的话几乎必然不是超时记录对应的那条指令。。。。
var fs = require('fs');var readline = require('readline');var stream = require('stream');var streamFile = function(filename){ var instream = fs.createReadStream(filename); var outstream = new stream; return readline.createInterface(instream, outstream);}var rl = streamFile('./logorder2015_12_1.txt');var i = 0;var startTime,stopTime;var errCount = 0;var colectorNum = '';var Datetemp1 = new Date();startTime = Datetemp1.getFullYear() + "-" + (Datetemp1.getMonth() + 1) + "-" + Datetemp1.getDate() + " " + Datetemp1.getHours() + ":" + Datetemp1.getMinutes() + ":" + Datetemp1.getSeconds() + ":" + Datetemp1.getMilliseconds();rl.on('line', function(line) { if(i <= 20000 ) { var data = line.toString(); var err = new RegExp('指令超时'); if(err.test(data)) { errCount ++; colectorNum = data.substr(data.length - 15 , 9); console.log(colectorNum); // console.log(line.toString()); // fs.appendFileSync('超时记录.txt', data + '\r\n', options = { encoding: 'utf8'}); } // console.log(i + '、' +line.toString()); // console.log(rl.outstream.toString()); } else { console.log('\n总共输出了' + (i-1) + '行'); rl.close(); } i++; // var req = someProcessingJob(line); // someStatisticJob(req); //类似forEach,处理每行日志的数据,一般先读,再执行统计代码});rl.on('close',function(){ var Datetemp2 = new Date(); stopTime = Datetemp2.getFullYear() + "-" + (Datetemp2.getMonth() + 1) + "-" + Datetemp2.getDate() + " " + Datetemp2.getHours() + ":" + Datetemp2.getMinutes() + ":" + Datetemp2.getSeconds() + ":" + Datetemp2.getMilliseconds(); console.log('\n输出结束!'); console.log('开始时间:' + startTime); console.log('结束时间:' + stopTime); console.log('指令超时的数量为:' + errCount + '个'); //文件结束,整理一下统计数据并输出 process.exit(0); //加上这一行可以强行结束程序,否则还会继续输出接下来的3,4,5,6直到最后一行。});