【问题标题】:c# csvfile to arrayc# csv文件到数组
【发布时间】:2016-07-04 10:06:46
【问题描述】:

我有一个 .csv 文件,其中包含多行和 3 列(由“;”分隔)和数字,我将其转换为 double array[][] 现在我添加了更多的数字列并得到一个错误:

FormatException -> 输入字符串的格式不正确

我找不到什么问题,因为文件相同(但多了 2 列) 我的代码:

OpenFileDialog fD = new OpenFileDialog();
fD.Title = "select";
fD.Filter = "csv files|*.csv";
fD.InitialDirectory = @"path here";
if (fD.ShowDialog() == DialogResult.OK)
    MessageBox.Show(fD.FileName.ToString());

double[][] termom = File.ReadLines(fD.FileName)
    .Select(l => l.Split(';')
        .Select(n => double.Parse(n))
        .ToArray())
    .ToArray();

编辑 感谢您对编辑的帮助 - 不太习惯这里的命令。希望我添加了正确的文件 original improved

【问题讨论】:

  • 检查您的输入数据。无法将某些内容解析为双精度
  • 看不到原文件和新文件是不可能的。
  • 您可能有空行或空数据(分号之间没有数字)导致异常。尝试用一行代码读取整个文件并不是一个好主意。编写更健壮的代码。
  • 您能给我们提供您的 .csv 文件样本吗?
  • @Tim Schmelter 添加了两个文件

标签: c# csv toarray


【解决方案1】:

您的文件res1.csv(假设它应该只包含double 值)有一些语法错误,例如

1881081,9;6,315177;352,499964;01,06,1974;350,645

01,06,1974是什么意思?我们是否应该忽略逗号(例如,将它们视为某种千位分隔符)?还是日期 (1 June 1974)?还有一种可能是, 是一个导数,所以我们有三个单独的值:161974

如果您想忽略逗号(因此 01,06,1974 将是 1061974.0),只需指定 InvariantCulture 而解析:

double[][] termom = File.ReadLines(fD.FileName)
  .Select(l => l.Split(';')
    .Select(n => double.Parse(n, CultureInfo.InvariantCulture))
    .ToArray())
  .ToArray();

如果您想将 , 视为派生者(因此 01,06,1974 将是 [1.0, 6.0, 1974.0]

double[][] termom = File.ReadLines(fD.FileName)
  .Select(l => l.Split(';', ',') // ',' is a deriver as well as ';'
    .Select(n => double.Parse(n, CultureInfo.InvariantCulture))
    .ToArray())
  .ToArray();

【讨论】:

  • 当它首先在 Excel 中转换了一些部分 - 似乎 5 个元素被视为日期\时间 thx 现在可以使用
猜你喜欢
  • 2013-04-18
  • 1970-01-01
  • 2014-02-01
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
相关资源
最近更新 更多