【发布时间】:2021-07-13 05:32:42
【问题描述】:
我正在处理相当大的 csv 文件(不是我的,我无法更改文件的格式)。 我的脚本将文件读入字符串,然后首先使用 .split() 方法将其转换为数组,然后使用“\n”拆分行。 行的分隔符是逗号 (",")。 问题是 csv 文件被写入在一些值中包含逗号,如下所示:
Type,Class,Result\n
AA,SG26,27%\n
AC,DC747,17%\n
"FF,RF",R$%,89%\n
HE,RT,56%\n
我的函数将它们视为单独的值,因为它依赖于分隔符为“,”的 split(),因此它将本示例中的所有值(如 csv[2][Type])一分为二。
我在拆分字符串之前尝试过使用替换功能:
String.prototype.processCSV = function(delimiter = ","){
var str;
if(this.includes('"'){
str = this.replace(/"\s,\s"/g, "");
}
//rest of the function
}
但我没有看到这样做的任何结果。
有什么方法可以区分值中的逗号和分隔逗号,或者有什么更好的方法将 csv 读入数组(请注意,数组随后会被映射,以便我可以通过键访问值)?
提前谢谢你。
编辑:我应该补充一点,该项目位于一个静态页面上,该页面首先使用 ajax xmlhttpresponse 将 csv 文件加载到字符串中,而不是在节点中,由于项目要求我无法建立节点后端。
【问题讨论】:
-
使用 csv 解析器。您的输入 csv 文件似乎是正确的 csv 文件,因此真正的 csv 解析器应该可以工作。正如您所发现的,csv 不仅仅是简单地以逗号分隔 - 它是一种正确的文件格式,如 XML 或 JSON。 npm 上有很多 csv 解析器:npmjs.com/search?q=csv
-
非常感谢您的帮助。我假设它们也适用于脚本(这个项目没有真正的后端,页面是静态的,它只是根据从服务器获取的几个 csv 文件处理数据),所以我不需要在模块中导入将脚本与 src 一起使用。
-
看看下面我的回答。我演示了如何使用基于浏览器的 Papaparse(尽管后来他们添加了对 node.js 的支持)并且功能非常丰富。只需在
<script>标记中添加一个指向缩小版本的链接即可。
标签: javascript csv split