使用nodejs将txt文件拆分为多个变量

时间:2017-09-19 12:26:05

标签: javascript arrays node.js string parsing

我有以下类型的文件,我与node.js同步阅读:

THIS IS A HEADLINE 

12.X. p. 200
Bla. - blabla. - blablablala. - Some more bla. -
Bla. - Some blaa. - blabla. - Some extra bla. -
Bla. - blabla. - blablablala. - Some more bla. -
Bla. - blabla. - blablablala.

12.XI. p. 202
blabla. - blablablala. - Some more bla. -
Bla. - bla. - blablala. - Some more bla. -
Bla. - Some blaa. - blabla. - Some more bla. -
Bla. - blabla. - blablablala. - Some more bla. -
Bla. - blbla. - blablablala. -

我现在要解析这个文件。我想在一个变量中加上标题,id号(12.X.),页码(p.200)和数组中的数据(Bla,blabla等)。

所以最后一切都会像:

{ 
 headline: "THIS IS A HEADLINE",
 1: { id: "12.X."
   pageno: 200
   content: ['Bla.','blabla.','blablablala', ... ]
 }
 2: { id: "12.XI."
   pageno: 202
   content: ['blabla.','blablablala.','Some more bla', ... ]
 }
}

我知道hot将所有blas放入一个数组中,修剪它们等但我不知道如何拆分标题以及如何查找包含id&的两行。页码。

现在我有:

var fs = require('fs');

try {
    var data = fs.readFileSync('files/file1.txt', 'utf8');
} catch(e) {
    console.log('Error:', e.stack);
}



var arr = data.split('-');

for(var i=0; i< arr.length;i++) {
  arr[i] = arr[i].replace(/\n/g, " ");
  arr[i] = arr[i].trim();
}

我只能通过查看数组的第一个元素来获得标题,但如果我先将-拆分,我将不得不搜索我的数组,然后搜索第一个blas每个块的数量。我也不能假设12.X. p. 200将始终位于第3行,12.XI. p. 202位于行号中。 9,因为那可能会改变。他们的价值观也会改变,所以我有点卡住了。

很抱歉,如果这是一个初学者问题太多,我刚刚开始!

1 个答案:

答案 0 :(得分:0)

如果您的数据一致,这将正常工作。

var linesData =data.split('\n\n')
var finalobj = {}; 
finalobj['headline'] = linesData[0].trim()
linesData.map((res, i) => {
    if (i!==0) {
        var lines = res.split('\n');
        var headersplit = lines[0].split(' ');
        var obj = {
            id: headersplit[0],
            pageno: +headersplit[2]
        }
        var contents = [];
        lines.map((line, j)=> {
            if(j!==0) {
                var newlinedata = line.split('-').map(m => m.trim()).filter(s => s!=='')
                contents = contents.concat(newlinedata);
            }
        })
        obj['content']=contents;
        finalobj[i]=obj;
    }
});
console.log(finalobj);