我的 csv 檔案是
1234567,AB,Client,S12345J,111 ABCD ABCEDE ADDRESS
1234567,BC,Client,S12345J,111 ABCD ABCEDE ADDRESS
1234567,CD,Client,S12345J,11 ABCD ABCEDE ADDRESS
1234567,DF,Client,S12345J,856 ABCD ABCEDE ADDRESS
我在 CSV 上使用 split 時遇到問題....我使用的正則運算式命令是/(. ?,. ?),.*/
if (typeof (FileReader) != "undefined") {
var Allvalues = new FileReader();
Allvalues.readAsText($("#fileUpload")[0].files[0]);
Allvalues.onload = (f) => {
this.splitted = f.target.result.split(/(.*?,.*?),.*/);
}
我期待一個陣列
["1234567,AB","1234567,BC"]
喜歡
0[] = "1234567,AB"
1[] = "1234567,BC"
但我得到
["", "1234567,AB", " ","1234567,BC",...]
喜歡
0[] = ""
1[] = "1234567,AB"
2[] = ""
4[] = "1234567,BC"
任何人都可以幫助糾正它...在此先感謝
uj5u.com熱心網友回復:
如果資料中沒有逗號,例如"111, ABCD ABCEDE, ADDRESS"
然后你可以用逗號分割和破壞并做一個減少以獲得唯一值
const csv = `1234567,AB,Client,S12345J,111 ABCD ABCEDE ADDRESS
1234567,BC,Client,S12345J,111 ABCD ABCEDE ADDRESS
1234567,AB,Client,S12345J,11 ABCD ABCEDE ADDRESS
1234567,DF,Client,S12345J,856 ABCD ABCEDE ADDRESS`
const res = csv.split(/\n/).reduce((acc,line) => {
const [a,b,c,d,e] = line.split(/,/)
if (!acc.find(arr => arr[0] === a && arr[1] === b)) acc.push([a, b])
return acc
},[])
console.log(res)
較舊的 JS
var csv = "1234567,AB,Client,S12345J,111 ABCD ABCEDE ADDRESS\n1234567,BC,Client,S12345J,111 ABCD ABCEDE ADDRESS\n1234567,AB,Client,S12345J,11 ABCD ABCEDE ADDRESS\n1234567,DF,Client,S12345J,856 ABCD ABCEDE ADDRESS";
var lines = csv.split(/\n/)
var res = []
for (var i=0;i<lines.length;i ) {
var arr = lines[i].split(/,/);
var found = false
for (var j=0;j<res.length; j ) {
if (res[j][0] === arr[0] && res[j][1] === arr[1]) {
found = true;
break;
}
}
if (!found) res.push([arr[0], arr[1]])
}
console.log(res)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/436475.html
標籤:javascript 正则表达式 CSV 解析
