3

我正在想办法使用 Javascript 计算 .csv 文件中的行数,有人可以指导我使用任何有用的提示或资源吗?

4

4 回答 4

8

取决于你的意思是一条线。对于简单数量的换行符,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;
于 2010-06-01T20:16:48.047 回答
4

要计算文档中的行数(一旦将其作为 Javascript 中的字符串),只需执行以下操作:

var lines = csvString.split("\n").length;
于 2010-06-01T19:50:33.167 回答
2

您可以使用“。” 匹配除最后换行符之外的行上的所有内容 - 它不会计算引用的新行。使用“m”表示多行标志,使用“g”表示全局。

function getLines(s){
    return s.match(/^(.*)$/mg);
}

alert(getLines(string).length)

如果您不介意跳过空行,它会更简单 - 但有时您需要保留它们以进行间隔。

函数 getLines(s){ 返回 s.match(/(.+)/g); }

于 2010-06-01T21:05:13.287 回答
0

如果您要求计算 csv 中的行数,那么您可以使用此示例。

http://purbayubudi.wordpress.com/2008/11/09/csv-parser-using-javascript/

它需要 csv 文件并在弹出窗口中显示行数..

于 2014-04-14T09:16:47.047 回答