【问题标题】:Splitting a txt file into several variables with nodejs使用nodejs将一个txt文件拆分成几个变量
【发布时间】:2018-02-28 05:43:57
【问题描述】:

我有以下类型的文件,我使用 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', ... ]
 }
}

我确实知道将所有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 总是在第三行,12.XI. p. 202 在第一行。 9,因为这可能会改变。他们的价值观也会改变,所以我有点卡住了。

对不起,如果这是一个初学者的问题,我才刚刚开始!

【问题讨论】:

  • 所以您的标题将位于不包含“-”的单独行中?
  • 上述模式是一致的,这意味着您将始终拥有页眉,页码。和 id(将在一起),内容。
  • 它是一致的,所以它将永远是:1.Header,2.Page No. &amp; Id,3.Content,然后是 4.Page No. &amp; Id,然后是 5.Content再次。所以 Header 出现一次,而其他所有内容都会出现两次。

标签: javascript arrays node.js string parsing


【解决方案1】:

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

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2014-09-11
    相关资源
    最近更新 更多