我正在想办法使用 Javascript 计算 .csv 文件中的行数,有人可以指导我使用任何有用的提示或资源吗?
4 回答
取决于你的意思是一条线。对于简单数量的换行符,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;
您可以使用“。” 匹配除最后换行符之外的行上的所有内容 - 它不会计算引用的新行。使用“m”表示多行标志,使用“g”表示全局。
function getLines(s){
return s.match(/^(.*)$/mg);
}
alert(getLines(string).length)
如果您不介意跳过空行,它会更简单 - 但有时您需要保留它们以进行间隔。
函数 getLines(s){ 返回 s.match(/(.+)/g); }
如果您要求计算 csv 中的行数,那么您可以使用此示例。
http://purbayubudi.wordpress.com/2008/11/09/csv-parser-using-javascript/
它需要 csv 文件并在弹出窗口中显示行数..