我正在想一个方法来计算行数在一个.csv文件使用Javascript,任何有用的提示或资源有人可以指导我?
bjp0bcyl1#
这取决于你所说的一行是什么意思。对于简单的换行符数量,Robusto的答案是好的。如果你想知道它代表了多少个CSV数据,事情可能会有点困难,因为CSV字段本身可能包含一个换行符:
field1,"field two",field3
......是一行,至少在RFC4180定义的CSV中是这样。(CSV的一个令人讨厌的特性是有这么多非标准的变体;RFC本身在这场游戏中起步很晚。)因此,如果您需要科普这种情况,您必须从本质上解析每个字段。一个字段可以是原始的,或者(如果它包含\n或,,这是必须的)用引号括起来,"用双引号表示。
\n
,
"
"([^"]|"")*"|[^,\n]*
因此对于整行(假设它不是空的):
("([^"]|"")*"|[^,\n]*)(,("([^"]|"")*"|[^,\n]*))*\n
并得到它们的数量:
var rowsn= csv.match(/(?:"(?:[^"]|"")*"|[^,\n]*)(?:,(?:"(?:[^"]|"")*"|[^,\n]*))*\n/g).length;
如果您有幸处理的CSV变体符合RFC 4180的建议,即在无引号字段中没有"字符,那么您可以使其更具可读性。如前所述,在换行符处拆分,并计算每行中"字符的数量。如果是偶数,则您有一个完整的行;如果是奇数,你就有一个分裂
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;
iq0todco2#
要计算文档中的行数(在Javascript中将其作为字符串),只需执行以下操作:
var lines = csvString.split("\n").length;
zvms9eto3#
您可以使用'.'匹配一行中的所有内容,除了末尾的换行符, -它不会计算带引号的新行。使用'm'表示多行标志,使用'g'表示全局标志。
function getLines(s){ return s.match(/^(.*)$/mg); } alert(getLines(string).length)
如果你不介意跳过空行的话,那就更简单了--但是有时候你需要保留它们来增加空间。函数getLines(s){返回s。匹配(/(.+)/g);}
nnsrf1az4#
如果您要求计算csv中的行数,则可以使用以下示例。http://purbayubudi.wordpress.com/2008/11/09/csv-parser-using-javascript/它需要csv文件并在弹出窗口中显示行数。
hfyxw5xn5#
下面是Typescript中的示例代码。需要FileReader才能获取内容。返回一个promise使得等待异步readAsText和onload函数的结果变得很容易。
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); }
5条答案
按热度按时间bjp0bcyl1#
这取决于你所说的一行是什么意思。对于简单的换行符数量,Robusto的答案是好的。
如果你想知道它代表了多少个CSV数据,事情可能会有点困难,因为CSV字段本身可能包含一个换行符:
......是一行,至少在RFC4180定义的CSV中是这样。(CSV的一个令人讨厌的特性是有这么多非标准的变体;RFC本身在这场游戏中起步很晚。)
因此,如果您需要科普这种情况,您必须从本质上解析每个字段。
一个字段可以是原始的,或者(如果它包含
\n
或,
,这是必须的)用引号括起来,"
用双引号表示。因此对于整行(假设它不是空的):
并得到它们的数量:
如果您有幸处理的CSV变体符合RFC 4180的建议,即在无引号字段中没有
"
字符,那么您可以使其更具可读性。如前所述,在换行符处拆分,并计算每行中"
字符的数量。如果是偶数,则您有一个完整的行;如果是奇数,你就有一个分裂iq0todco2#
要计算文档中的行数(在Javascript中将其作为字符串),只需执行以下操作:
zvms9eto3#
您可以使用'.'匹配一行中的所有内容,除了末尾的换行符, -它不会计算带引号的新行。使用'm'表示多行标志,使用'g'表示全局标志。
如果你不介意跳过空行的话,那就更简单了--但是有时候你需要保留它们来增加空间。
函数getLines(s){返回s。匹配(/(.+)/g);}
nnsrf1az4#
如果您要求计算csv中的行数,则可以使用以下示例。
http://purbayubudi.wordpress.com/2008/11/09/csv-parser-using-javascript/
它需要csv文件并在弹出窗口中显示行数。
hfyxw5xn5#
下面是Typescript中的示例代码。
需要FileReader才能获取内容。
返回一个promise使得等待异步readAsText和onload函数的结果变得很容易。