当前位置: 首页 > 知识库问答 >
问题:

如何将一个包含CSV数据和任意文本的字符串拆分成一个数组的JavaScript数组?

易弘亮
2023-03-14

我有一个长字符串,其中包含文件中的 CSV 数据。我想把它存储在一个JavaScript数组数组中。但是一列中包含任意文本。该文本可以包含双引号和逗号。

将CSV字符串拆分为单独的行字符串没有问题:

< code > var theRows = the CSV . split(/\ r?\ n/);

但是,我怎样才能最好地分割每一行呢?

因为这是CSV数据,我需要用逗号分开。但是

var theArray = new Array();
for (var i=0, i<theRows.length; i++) {
    theArray[i] = theRows[i].split(',');    
}

不适用于包含引号和逗号的元素,例如:

512,"""Fake News"" and the ""Best Way"" to deal with A, B, and C", 1/18/2019,media

我怎样才能确保第二个元素正确地存储在一个数组元素中

 "Fake News" and the "Best Way" to deal with A, B, and C

谢谢

不幸的是,当我在那里尝试CSVtoArray函数时,看起来类似的建议解决方案不起作用。没有返回数组元素,而是返回了一个空值,如我下面的评论所述。

共有1个答案

钦枫
2023-03-14

这应该可以做到:

let parseRow = function(row) {
  let isInQuotes = false;
  let values = [];
  let val = '';

  for (let i = 0; i < row.length; i++) {
    switch (row[i]) {
      case ',':
        if (isInQuotes) {
          val += row[i];
        } else {
          values.push(val);
          val = '';
        }
        break;

      case '"':
        if (isInQuotes && i + 1 < row.length && row[i+1] === '"') {
          val += '"'; 
          i++;
        } else {
          isInQuotes = !isInQuotes
        }
        break;

      default:
        val += row[i];
        break;
    }
  }

  values.push(val);

  return values;
}

它将返回数组中的值:

parseRow('512,"""Fake News"" and the ""Best Way"" to deal with A, B, and C", 1/18/2019,media');
// => ['512', '"Fake News" and the "Best Way" to deal with A, B, and C', ' 1/18/2019', 'media']

要获取请求的数组数组,您可以执行以下操作:

let parsedCsv = theCsv.split(/\r?\n/).map(parseRow);

代码可能看起来有点晦涩。但主要思想如下:我们逐个字符解析字符串。当我们遇到"时,我们设置isInQuotes=true。这将改变解析"的行为。当我们遇到单个"时,我们再次设置isInQuotes=false

 类似资料:
  • 假设我们有以下字符串: 我需要将它们分开,以获得以下结果: 你会怎么做?

  • 以下是我所做的: 我的意见如下: 这意味着什么无关紧要,但扫描仪所做的是首先将其存储在字符串“按原样”中。然后,我使用 replaceAll 函数删除所有空格。然后我剩下: 然后,我使用java解释这段代码,如果没有错误发生,就执行计算。我现在的问题是,当我把字符串分割成记号时,它将使每个“减号”成为它自己的记号,但我想以某种方式把它和它后面的整数联系起来,这样记号仍然只是一个整数(现在是负的),

  • 问题内容: 我是Python的完整新手,但似乎给定的字符串可以(有效)为任意长度。也就是说,您可以加入并继续添加:。有没有办法制作这样的字符串数组? 当我尝试此操作时,每个元素仅存储一个字符 另一方面,我知道我可以初始化一定长度的字符串数组,即 最多可以存储10个字符串,最多256个字符。 问题答案: 您可以通过创建一个数组来实现。如果您尝试将长字符串分配给普通的numpy数组,则会截断该字符串:

  • 本文向大家介绍JavaScript 将字符串拆分为数组,包括了JavaScript 将字符串拆分为数组的使用技巧和注意事项,需要的朋友参考一下 例子 用于.split从字符串到拆分子字符串的数组: 使用数组方法 .join返回字符串:            

  • 我有两个数组 我想检查是否包含中的任何项。基于这里的帖子,我有以下代码,它只适用于chrome

  • 如果我有这个字符串:“MyStringToForSpl的”,我想用这个词“环”来拆分它。如果我这样做:我将得到包含以下元素的数组: MyS 用于拆分 我无法找到拆分它并在结果数组中包含“ring”的最佳方法,如下所示: 1.我的 2 .戒指 3.ForSplitting