【问题标题】:How to skip to new line while writing to CSV using javascript如何在使用 javascript 写入 CSV 时跳到新行
【发布时间】:2020-10-20 12:56:37
【问题描述】:

我有一个对象数组,比如 array=[hello, how, are, you],我从 document.innerHTML 中提取。 我需要使用 puppeteer 和 JavaScript 将它们写入 CSV 文件 一个低于另一个。
如果我使用普通的 fs.writeFile(),它会被打印出来,

hello how are you

但是,我希望将它写在一个在另一个之下的文件中,例如,

hello
how
are
you

我怎样才能做到这一点? 每次输入后如何换行?

注意:

1)请注意,这是一个 OBJECTS 数组,而不是 STRINGS。

2)如果我把数组改成字符串然后写入文件就可以了。

这是我目前编写的代码。

for(var k=0; k<value.length; k++){
  data=value[k]
  fs.writeFile('export1.csv', data, (err) => {
    if (err) throw err;
    console.log('The file has been saved!');
    
  });

额外学分:

有什么方法可以让我停止在同一列中写入并移至新列?然后切换回来?

【问题讨论】:

  • 为了将来参考,字符串是对象(它们是String 类的实例)。
  • 您能否说明您希望如何将对象添加到文件中?你想把对象写成 JSON 吗?是否有您要使用的对象的特定字段?
  • @Moutah 我只想将文本数组写入 CSV。仅此一项就可以了。类型真的不重要。
  • 但是你说你有一个对象数组。您能否提供有关这些对象的更多详细信息或数组的示例?我没有正确理解您的情况。
  • 尝试使用这个包 - npmjs.com/package/objects-to-csv .. 我想这就是你想要实现的目标。

标签: javascript node.js export-to-csv


【解决方案1】:

根据您的描述,我相信您正在寻找以下内容:

const fs = require('fs');

const array = [
    {
      a: 1,
      b: 2
    },
    {
      c: 3,
      d: 4
    }
];

const dataToSave = array.map(item => {
    return JSON.stringify(item)
      .replace(/\"/gi, '""');
  })
  .map(item => `"${item}"`)
  .join('\n');

fs.writeFile('export1.csv', dataToSave, (err) => {
    if (err) throw err;
    console.log('The file has been saved!');    
});

使用 CSV 和对象有点复杂,因为 CSV 和 JSON 字符串都使用引号和逗号来分隔事物。在上面的数组中的对象是 JSON 字符串化的,然后引号 " 被转义为 ""。此外,数组项随后用引号 " 括起来,最后与换行符 \n 连接。

如果您使用的是窗口计算机,您可能想要使用\r 而不是\n。无论您使用什么来打开 .csv,例如 Excel,都应该足够聪明,可以找出行尾,无论它是 \n 还是 \r

对于额外的功劳,请使用逗号 (,) 移至另一列。 CSV 代表“逗号分隔值”,因此逗号是将文本分隔为离散部分的分隔符,每个部分显示在单独的列中。例如,您可以替换:

.map(item => `"${item}"`)

与:

.map(item => `,"${item}"`) // Comma added here

如果你想做比这更复杂的事情,我会考虑:

https://www.npmjs.com/package/csv

参考资料:

【讨论】:

    猜你喜欢
    • 2012-07-24
    • 1970-01-01
    • 2014-08-14
    • 2019-01-01
    • 2021-10-28
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多