我正在尝试想出一种使用Javascript计算.csv文件中行数的方法,有没有什么有用的技巧或资源可以指导我?
我正在尝试想出一种使用Javascript计算.csv文件中行数的方法,有没有什么有用的技巧或资源可以指导我?
取决于您对“行”的理解。如果只是简单的换行数,Robusto的回答很好。
如果您想知道这代表多少CSV数据的行数,则可能会更加困难,因为CSV字段本身可能包含换行符:
field1,"field
two",field3
...至少在由RFC4180定义的CSV中是一行。 (CSV的令人恼火的特点之一是有很多非标准变体; RFC本身在游戏中非常晚。)
因此,如果您需要处理该情况,则必须基本上解析每个字段。
字段可以是原始的,或者(如果它包含\n
或,
)则必须用引号引起来,其中"
表示为双引号。 因此,一个字段的正则表达式将是:
"([^"]|"")*"|[^,\n]*
对于一整行(假设它不是空的):
("([^"]|"")*"|[^,\n]*)(,("([^"]|"")*"|[^,\n]*))*\n
并且要获取它们的数量:
var rowsn= csv.match(/(?:"(?:[^"]|"")*"|[^,\n]*)(?:,(?:"(?:[^"]|"")*"|[^,\n]*))*\n/g).length;
如果你很幸运,正在处理遵守RFC4180建议的CSV变体,即未引用字段中没有"
字符,那么你可以使其更易读。像以前一样按换行符分割,并计算每行中"
字符的数量。如果是偶数,你有一行完整的数据;如果是奇数,你就有了一个拆分的数据。
var lines= csv.split('\n');
for (var i= lines.length; i-->0;)
if (lines[i].match(/"/g).length%2===1)
lines.splice(i-1, 2, lines[i-1]+lines[i]);
var rowsn= lines.length;
如果您在Javascript中将文档作为字符串,要计算行数,只需执行以下操作:
var lines = csvString.split("\n").length;
function getLines(s){
return s.match(/^(.*)$/mg);
}
alert(getLines(string).length)
如果您不介意跳过空行,那么它会更简单 - 但有时需要保留它们以保持间隔。
函数获取每一行的内容:
function getLines(s){
return s.match(/(.+)/g);
}
const countRowsInCSV = async (csvFile: File): Promise<number> => {
return new Promise((resolve, reject) => {
try {
const reader = new FileReader();
reader.onload = (event: any) => {
const cvsData = event.target.result;
const rowData = cvsData.split('\n');
resolve(rowData.length);
};
reader.readAsText(csvFile);
} catch (error: any) {
reject(error);
}
});
};
const onChangeFile = (selectedFile: File) => {
const totalRows = await countRowsInCSV(selectedFile);
}
http://purbayubudi.wordpress.com/2008/11/09/csv-parser-using-javascript/
它接收 CSV 文件并在弹出窗口中显示行数。
*
以获取最后一行。对我有效的最终正则表达式是:("([^"]|"")*"|[^,\n]*)(,("([^"]|"")*"|[^,\n]*))*\n*
。 - Carme