C# csv文件到数组

标签 c# csv toarray

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

FormatException -> Input string was not in a correct format

我找不到问题所在,因为文件是相同的(但多了 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

最佳答案

您的文件 res1.csv(前提是它应仅包含 double 值)存在一些语法错误,例如

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

01,06,1974 的含义是什么?我们是否应该忽略逗号(将它们视为某种千位分隔符)?或者是日期(1974 年 6 月 1 日)?另一种可能性是 , 是一个派生,因此我们有三个单独的值:1, 61974

如果您想忽略逗号(因此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();

关于C# csv文件到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38181998/

相关文章:

excel - Excel 创建的以分号作为分隔符的 CSV 文件的正确 MIME 类型是什么

java - List 的 toArray 方法以及 List 中对象的运行时类型

c# - System.Data.Entity.Infrastructure.CommitFailedException : C# Multithreading & SQL Server 2012

php - 使用 PHP/MySQL 导入 CSV 数据

c# - 从 ASP.NET MVC Controller 构造函数访问时 IPrincipal 属性为 null

python - 如何使用Python打开大文件(9GB)?

java - 将 LinkedBlockingQueue<> 中的数据放入非对象类型的数组

c# - 下拉值只选择第一个值

c# - 如何确保 WCF 服务不会与数据库并行通信