【发布时间】:2021-11-19 20:48:21
【问题描述】:
C# 使用正则表达式读取具有正确单元格格式的 CSV 数据。
我遇到了 CSV 单元格格式的问题。
我的excel数据如下:
Date | Acct | Name
20210928 | 3.02+ 13 | ABC
Acct 是 14 位数字。但Acct number显示为上述格式。
读取excel数据的代码如下:
var csvlines = File.ReadAllLines(file);
Regex CSVParser = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
var csvLinesData = csvlines.Skip(1).Select(l => CSVParser.Split(l).ToArray());
使用此代码,CSV 逗号分隔的单元格值将添加到数组中。 但是在这里,Acct 字段数据被获取为“3.02+ 13”,但我需要它作为 14 位数字
如何在上面的代码中做到这一点?与正则表达式有什么关系?
【问题讨论】:
-
在尝试编写自己的 CSV 解析器之前,请调查 NuGet 上现有的任何免费 CSV 解析包是否可以解决此问题。无需重新发明轮子。
-
内容是
3.02+ 13。您要求的是将该字符串解析为一个数字,而这不能用正则表达式完成。你必须使用long.Parse -
您是指将数据导入电子表格编辑器时的数据显示方式?或者当您查看写入文件的原始数据时?
-
这是因为 Excel 将您的 14 位数字转换为“科学记数法”,不幸的是,这是一个常见问题。见logicbroker.com/excel-scientific-notation-disable-prevent。您的解析不是问题,问题在于 CSV 文件本身已损坏。
-
我无法想象在很多情况下我会使用正则表达式来解析 CSV。我会使用 CsvHelper(在 NuGet 中可用)。正则表达式并不是每个钉子都可以使用的锤子。
标签: c# csv number-formatting