Javascript 获取文档中的最新日期并输出包含该日期的行

Javascript 获取文档中的最新日期并输出包含该日期的行,javascript,jquery,node.js,date,mongoose,Javascript,Jquery,Node.js,Date,Mongoose,我有一个名为Application.txt的文档,有多个列和行,如下所示 ApplNo DocsURL DocDate 4782 www…。7/28/2003 4782 www…。11/23/2008 4782 www…。3/24/2012 5010 www…。4/5/2003 5010 www…。3/16/2008 5010 www…。3/12/2013 6002 www…。6/29/2009 6002 www…。2011年4月20日 我需要找到每个ApplNo值的最新文档日期,并将整行保存到

我有一个名为Application.txt的文档,有多个列和行,如下所示

ApplNo DocsURL DocDate
4782 www…。7/28/2003
4782 www…。11/23/2008
4782 www…。3/24/2012
5010 www…。4/5/2003
5010 www…。3/16/2008
5010 www…。3/12/2013
6002 www…。6/29/2009
6002 www…。2011年4月20日

我需要找到每个ApplNo值的最新文档日期,并将整行保存到txt文件中。例如,我的代码应该遍历文档并将输出返回到文本文件

ApplNo DocsURL DocDate
4782 www…。3/24/2012
5010 www…。3/12/2013
6002 www…。2011年4月20日

我现在这样做是为了阅读文档中的行

var dataFilename = config.file_path + '/datafiles/Application.txt';
console.log("Input file = " + dataFilename);
fs.createReadStream(dataFilename).pipe(parser);
然而,我不确定从这里走到哪里。我只是从节点js开始

我做了一些研究,发现MongooseJS是一个不错的选择,使用类似这样的东西

var Object = new Schema({
    ApplNo: Number
  , DocsURL: String
  , DocDate: Date
});

Object.findOne({}, {}, { sort: { 'created_at' : -1 } },function(err,post{
console.log( post );
});
但我不确定如何将文本文档读入模式,或者该方法是否会输出包含每个应用程序编号的最新日期的行


任何帮助或指导都将不胜感激

看起来没人回答这个问题,所以我尝试一下(我对nodejs也很陌生)。 看起来我们可以得到如下的字符串流:

var readable=fs.createReadStream(dataFilename);
readable.setEncoding("utf-8");
readable.on('data', (chunk) => {
  //chunk should be a part of a string
  console.log(chunk);
});
readable.on("end",()=>console.log("end"));
var result=[
   ["5010", "www….", "3/12/2013"]
   ["6002",  "www….", "4/20/2011"]
]; 
因此,现在我们需要将其存储在某个位置,并按“”拆分,然后按三个分组:

var temp="";
var temparray=[];
var result=[];

var readable=fs.createReadStream(dataFilename);
readable.setEncoding("utf-8");
readable.on('data', (chunk) => {
  //append the chunk to our string:
  temp+=chunk;
  //get all completely transfered data
  var arr=temp.split(" ");
  //replace temp with the last elem:
  temp=arr.pop();
  //add the rest to our temp array:
  temparray=temparray.concat(arr);
  //get groups of three
  while(temparray.length>=3){
    result.push(temparray.splice(0,3));
  }
});
readable.on("end",()=>{
  console.log("not parsed:"+temp+";"+temparray.join(" "));
  result.forEach((row,line)=>console.log(line+":"+row.join(" "));
});
所以结果现在应该是一个有序数组,如下所示:

var readable=fs.createReadStream(dataFilename);
readable.setEncoding("utf-8");
readable.on('data', (chunk) => {
  //chunk should be a part of a string
  console.log(chunk);
});
readable.on("end",()=>console.log("end"));
var result=[
   ["5010", "www….", "3/12/2013"]
   ["6002",  "www….", "4/20/2011"]
]; 

请检查/注释,我将进一步查看…

将文件中的整个字符串按换行符拆分为数组

迭代此数组,并使用多个空格将每行拆分为数组

创建一个应用程序编号为键的对象,并比较存储适当数据的日期

然后,最后迭代包含日期最高的行的结果对象,并对其执行任何操作

var data=`ApplNo DocsURL DocDate
4782 www…。7/28/2003
4782 www…。11/23/2008
4782 www…。3/24/2012
5010 www…。4/5/2003
5010 www…。3/16/2008
5010 www…。3/12/2013
6002 www…。6/29/2009
6002 www…。4/20/2011`;
//从每行创建数组
变量行=data.split('\n');
//删除标题行
线。拼接(0,1);
//对象以存储当前最高日期和行
var appObj=行。减少(函数(a、c、i){
//删除多余的空格和“\r”`
变量线=c.修剪(),
//为此行创建列数组
arr=行分割(“”),
appNum=arr[0],
日期=新日期(arr[2]);
如果(!a[appNum]){
//如果以前未遇到appNum,请创建新对象
a[appNum]={line:line,date:date};
}否则,如果(日期>a[appNum].date){
//或者,如果找到更大的日期,则更新现有appNum
a[appNum].date=日期;
a[appNum]。行=行
}
返回a;
}, {});
//迭代对象和过程结果
Object.keys(appbj).forEach(函数(appNum){
console.log('appNum'的高日期行为--',appbj[appNum].Line)

})
是否每行都以.结尾?可以做string.split(“.”)或类似的事情……不,行不会以句号结尾。多么漂亮的文本文件。格式化它会更容易,只要说…谢谢!!知道如何正确分割文本文件确实有帮助。@fluxing23注意这是阻塞。如果你有一个非常大的txt文件,这将关闭你的服务器。。。