【问题标题】:C# Reading CSV data with correct cell format using RegexC# 使用正则表达式以正确的单元格格式读取 CSV 数据
【发布时间】: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


【解决方案1】:

我的 CSV 解析器 (CsvParser) 将为您解析 CSV 文件中的值。

在您的示例中,该值似乎是非标准的。但是,我的库允许您为那一列编写自己的自定义转换器。使用一些自定义代码转换该值应该不会太难。

在我的 GitHub 页面上有如何编写自定义转换器类的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多