使用Javascript计算CSV中的行数

vcudknz3  于 2023-02-27  发布在  Java
关注(0)|答案(5)|浏览(99)

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

bjp0bcyl

bjp0bcyl1#

这取决于你所说的一行是什么意思。对于简单的换行符数量,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;

如果您有幸处理的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;
iq0todco

iq0todco2#

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

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

zvms9eto3#

您可以使用'.'匹配一行中的所有内容,除了末尾的换行符, -它不会计算带引号的新行。使用'm'表示多行标志,使用'g'表示全局标志。

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

alert(getLines(string).length)

如果你不介意跳过空行的话,那就更简单了--但是有时候你需要保留它们来增加空间。
函数getLines(s){返回s。匹配(/(.+)/g);}

nnsrf1az

nnsrf1az4#

如果您要求计算csv中的行数,则可以使用以下示例。
http://purbayubudi.wordpress.com/2008/11/09/csv-parser-using-javascript/
它需要csv文件并在弹出窗口中显示行数。

hfyxw5xn

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);
}

相关问题