如何在Javascript中解析CSV
(我的第一篇帖子,我为任何错误道歉) 我正在处理CSV文件中的一小部分数据,我需要读取、处理这些数据,然后将其导出为文本文件 CSV数据的格式为:如何在Javascript中解析CSV,javascript,jquery,arrays,algorithm,csv,Javascript,Jquery,Arrays,Algorithm,Csv,(我的第一篇帖子,我为任何错误道歉) 我正在处理CSV文件中的一小部分数据,我需要读取、处理这些数据,然后将其导出为文本文件 CSV数据的格式为: REGO,STATUS,SHIFT,LOCATION,LOADED CCA4110,StatusON,5:43,Brisbane,1 CCA4112,StatusON,5:44,Syndey,0 CCA4118,StatusON,6:11,Melbourne,1 我希望能够在标题行之后获取每一行,并进行检查 a) 如果“已加载”值等于0或1(如果为
REGO,STATUS,SHIFT,LOCATION,LOADED
CCA4110,StatusON,5:43,Brisbane,1
CCA4112,StatusON,5:44,Syndey,0
CCA4118,StatusON,6:11,Melbourne,1
我希望能够在标题行之后获取每一行,并进行检查
a) 如果“已加载”值等于0或1(如果为1,则跳到下一行)
b) 如果“LOADED”为0,则检查“REGO”值是否与预定义的“REGO”值列表匹配
c) 如果匹配,请更改“班次”时间
d) 如果没有匹配项,请转到下一行
在这之后,我想导出所有行,只包含'REGO'和'SHIFT'值,如下所示:
CCA4110,5:43
CCA4112,5:33
...
因为这对我来说有点复杂,我很难想象解决这个问题的最佳方法。我想知道是否有人能帮助我思考这个问题,而不仅仅是将一打嵌套for循环拼凑在一起
非常感谢
利亚姆
编辑:关于检查多个条件的问题:
假设我有两个CSV文件:
列表到更改.csv
REGO,STATUS,SHIFT,LOCATION,LOADED
CCA2420,StatusOn,11:24,BRISBANE,1
CCA2744,StatusOn,4:00,SYDNEY,1
CCA2009,StatusOn,4:00,MELBOURNE,0
REGO,CORRECT_SHIFT
CCA2420,6:00
CCA2660,6:00
CCA2009,5:30
列出要比较的内容。csv
REGO,STATUS,SHIFT,LOCATION,LOADED
CCA2420,StatusOn,11:24,BRISBANE,1
CCA2744,StatusOn,4:00,SYDNEY,1
CCA2009,StatusOn,4:00,MELBOURNE,0
REGO,CORRECT_SHIFT
CCA2420,6:00
CCA2660,6:00
CCA2009,5:30
算法:
1。检查“列表到检查.csv”“已加载”列中的值
A.如果值等于“0”,则转至步骤2
B.如果值等于“1”,则跳过此行并转到下一行
2.检查“List\u to\u Check.csv”中的“REGO”值是否显示在“List\u to\u Compare.csv”中
A.如果为真,则转至步骤3
B.如果为false,则跳过此行并转到下一行
3.将“List\u”中的“SHIFT”值更改为“Change.csv”,值显示在“List\u to\u Compare.csv”中
4。将更改的每一行字符串化并导出到文本文件。我的建议是将工作流程分为三个步骤:
//这将根据列的顺序创建对象:
常量条目=([rego,status,shift,location,loaded])=>
({rego,status,shift,location,loaded});
//我们对哪些作品感兴趣?
const shouldHandleEntry=({loaded})=>loaded==“1”;
//我们如何更新这些条目?
const updateEntry=条目=>({
进入
班次:[“CCA4118”]包括(entry.rego)
? "5:33"
:entry.shift
});
//我们出口什么?
const exportEntry=({rego,shift})=>`${rego},${shift}`;
//链接创建新表的步骤:
console.log(
csvBody(getCSV())
.map(条目)
.过滤器(应安装和安装)
.map(更新尝试)
.map(导出条目)
.join(“\n”)
)
//(如果将其用于生产代码,则需要进行此操作)
函数csvBody(csvString){
返回csvString
.split(“\n”)
.map(line=>line.trim().split(“,”))
.切片(1);
};
函数getCSV(){return`REGO,STATUS,SHIFT,LOCATION,LOADED
CCA4110,StatusON,5:43,布里斯班,1
澳大利亚,悉尼,5:44,CCA4112,StatusON
CCA4118,StatusON,6:11,墨尔本,1`;}
我的建议是将工作流程分为三个步骤:
//这将根据列的顺序创建对象:
常量条目=([rego,status,shift,location,loaded])=>
({rego,status,shift,location,loaded});
//我们对哪些作品感兴趣?
const shouldHandleEntry=({loaded})=>loaded==“1”;
//我们如何更新这些条目?
const updateEntry=条目=>({
进入
班次:[“CCA4118”]包括(entry.rego)
? "5:33"
:entry.shift
});
//我们出口什么?
const exportEntry=({rego,shift})=>`${rego},${shift}`;
//链接创建新表的步骤:
console.log(
csvBody(getCSV())
.map(条目)
.过滤器(应安装和安装)
.map(更新尝试)
.map(导出条目)
.join(“\n”)
)
//(如果将其用于生产代码,则需要进行此操作)
函数csvBody(csvString){
返回csvString
.split(“\n”)
.map(line=>line.trim().split(“,”))
.切片(1);
};
函数getCSV(){return`REGO,STATUS,SHIFT,LOCATION,LOADED
CCA4110,StatusON,5:43,布里斯班,1
澳大利亚,悉尼,5:44,CCA4112,StatusON
CCA4118,StatusON,6:11,墨尔本,1`;}
这可能会帮助您获得一些提示:。在任何情况下,这只是关于拆分字符串,您是否尝试过任何方法,或者您正在寻找一种理论方法?@briosheje非常感谢您提供的资源,我现在将检查它。我自己也做过一些尝试,根据回车符分割输入,并尝试(但失败)理解如何使用Papa Parse来处理文件。我想我更想知道是否有更聪明的方法来看待这个问题。再次感谢您,请分享您正在谈论的尝试(因此,代码),这将是一个很好的起点,很高兴帮助您从您的输入开始;)这可能会帮助您获得一些提示:。在任何情况下,这只是关于拆分字符串,您是否尝试过任何方法,或者您正在寻找一种理论方法?@briosheje非常感谢您提供的资源,我现在将检查它。我自己也做过一些尝试,根据回车符分割输入,并尝试(但失败)理解如何使用Papa Parse来处理文件。我想我更想知道是否有更聪明的方法来看待这个问题。再次感谢您,请分享您正在谈论的尝试(因此,代码),这将是一个很好的起点,很高兴帮助您从您的输入开始;)这是难以置信的,而且非常接近我想要表达的意思。非常感谢你抽出时间来做这件事。我从你写的文章中学到了很多。如果我想检查一个条件,例如“位置=1”,那么这很有意义。如果我想检查多个条件,那么最好的方法是什么?我用一个c语言的例子编辑了这篇主要文章