Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript计算CSV中的行数_Javascript_Csv_Count_Lines - Fatal编程技术网

使用Javascript计算CSV中的行数

使用Javascript计算CSV中的行数,javascript,csv,count,lines,Javascript,Csv,Count,Lines,我正在尝试使用Javascript计算.csv文件中的行数,有人能告诉我一些有用的提示或资源吗?要计算文档中的行数(在Javascript中将其作为字符串),只需执行以下操作: var lines = csvString.split("\n").length; 这取决于你所说的线是什么意思。对于简单数量的换行符,Robusto的答案很好 如果您想知道表示多少行CSV数据,可能会有点困难,因为CSV字段本身可能包含换行符: field1,"field two",field3 …是一行,至少在C

我正在尝试使用Javascript计算.csv文件中的行数,有人能告诉我一些有用的提示或资源吗?

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

var lines = csvString.split("\n").length;

这取决于你所说的线是什么意思。对于简单数量的换行符,Robusto的答案很好

如果您想知道表示多少行CSV数据,可能会有点困难,因为CSV字段本身可能包含换行符:

field1,"field
two",field3
…是一行,至少在CSV中由定义。(CSV有如此多的非标准变体,这是CSV令人恼火的特性之一;RFC本身在游戏中已经很晚了。)

因此,如果您需要处理这种情况,您必须从本质上解析每个字段

一个字段可以是原始的,或者(如果它包含
\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;

可以使用“.”匹配一行中的所有内容,但末尾的换行除外- 它不会计算引用的新行。多行标志使用“m”,全局标志使用“g”

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

alert(getLines(string).length)
如果你不介意跳过空行,那就简单多了- 但有时你需要保留它们以供太空飞行

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

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


它使用csv文件,并在弹出窗口中显示行数。

太酷了。我没有真正想到这个解决方案,我会尝试一下。谢谢!当csv值中有新行时,这不会给出正确的结果。我必须在末尾添加一个
*
,以获得最后一行。对我有效的最后一个正则表达式是:
([^]|*)*”|[^,\n]*)(,((([^”]|“”)*“|[^,\n]*)*\n*
function getLines(s){
    return s.match(/^(.*)$/mg);
}

alert(getLines(string).length)