【问题标题】:Reading a tab separated data from text file in node js从节点js中的文本文件中读取制表符分隔的数据
【发布时间】:2021-06-28 03:20:06
【问题描述】:

我有一个 .txt 文件,其中有 tab (\t) 和 分号 (;) 分隔数据,我想要读取数据并创建 JSON 对象。我尝试了正则表达式,但无法创建正确的正则表达式。任何帮助将不胜感激。

test.txt

sam tory 22;raj kumar 24

output.json

[
    {
        "Fname": "sam",
        "lastname": "troy",
        "Age": "22",
    },
    {
        "Fname": "raj",
        "lastname": "kumar",
        "Age": "24",
    }
]

【问题讨论】:

  • 使用fs 读取文件,然后使用split by ; 并解析您的数据。
  • 但是制表符分隔的数据呢?
  • \t拆分,我只是测试,它可以工作。

标签: javascript node.js regex


【解决方案1】:

使用fs模块读取文件内容。

var content = fs.readFileSync("profiles.tsv", "utf8");

然后映射各个条目以将它们转换为对象:

const file = 'sam     tory  22;raj  kumar   24';
const json = file.split(';')
    .map(profile => {
        const [Fname, lastname, Age] = profile.split('\t');
        return { Fname, lastname, Age };
    });

console.log(json)

【讨论】:

    【解决方案2】:

    使用库 csvtojson:https://www.npmjs.com/package/csvtojson

    这里是测试代码:

    const csv=require('csvtojson')
    
    const filePath='test.tsv'
    
    var main = async () => {
      const jsonArray = await csv({delimiter:'\t'}).fromFile(filePath);
      console.log("jsonArray:", jsonArray);
    }
    
    main()
    

    【讨论】:

      【解决方案3】:

      您应该使用 JavaScript split 函数来分割您的文本。

      var r = [];
      var t = "sam	tory	22;raj	kumar	24";
      var v = t.split(";");
      for (var i = 0; i < v.length; i++) {
        var w = v[i].split("\t");
        r.push({
          Fname: w[0],
          lastname: w[1],
          Age: w[2]
        });
      }
      console.log(r);

      【讨论】:

      • 这个答案不考虑字符转义。字段中不太可能有嵌入式选项卡,但有可能。对于其他分隔符(例如逗号),可能有更高的概率必须转义字符(引号、分隔符、回车)。在我看来,总体而言,Alfredo 的答案是一个更可靠的解决方案。
      猜你喜欢
      • 2012-12-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2023-01-01
      • 2021-09-22
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多