我在javascript中有这段代码:
var i = 0;
var j = 0;
while (allTextLines.length) {
var line = allTextLines.shift().split('"');
var temp = line[1].split('');
if (i == 0) {
alert(temp);
i++;
}
var x = (temp[0] + temp[1]+ temp[2] + temp[3] + "-" + temp[4] + temp[5] + temp[6]);
var y = line[3];
var z = line[5];
var g = line[7];
lines[j] = (x + ", " + z + ", " + g);
j++;
}
它正在发生一些非常奇怪的事情。在i==0
时,它会提醒temp
及其分组。在那之后我得到了:
Uncaught TypeError: Cannot read property 'split' of undefined
如果我删除if
,我会在开始时出现此错误。但如果我做这样的事情:
var line = allTextLines.shift().split('"');
var temp = line[1].split('');
alert(temp);
var x = (temp[0] + temp[1]+ temp[2] + temp[3] + "-" + temp[4] + temp[5] + temp[6]);
分割没有问题(警报显示它已被正确分割)。唯一的问题是我必须点击“确定”5600次。我不明白到底发生了什么以及为什么我会遇到这个错误。
我正在使用以下行分割CSV文件:
35105,201401,503781827,"8400258","Faro","Lagoa (Algarve)","Portugal"
我想在这里添加一个' - ':“8400258”,所以它变成“8400-258”
答案 0 :(得分:0)
var line = allTextLines.shift().split('"');
var temp = line[1].split('');
当allTextLines中只有一个元素时,这不会失败,因为该数组是从零开始的吗?我想你需要将第[x]行更改为0:
var temp = line[0].split('');
答案 1 :(得分:0)
我可以建议采用不同的方法吗?
var line = allTextLines.shift().split(',');
var x = line[3].replace(/^"(\d{4})(\d{3})"$/, "$1-$2");
var y = line[4];
var z = line[5];
var g = line[6];
如果您可以相信数据的格式总是相同的,那么进行基于模式的替换要比分割类似数组的字符串并重新组装它要复杂得多。