You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CSV文件内容存入double[]数组?解析时遇格式异常求解决

读取CSV转double数组触发FormatException异常的解决

问题现象

读取CSV文件内容到字符串数组正常,但转换为double数组时抛出异常:

System.FormatException: 'Input string was not in a correct format.'

原代码

string[] csvFile = System.IO.File.ReadAllText(@"C:\Users\...\Documents\CSVExample.csv").Split(',');
double[] dblArray = Array.ConvertAll(csvFile, double.Parse);
foreach (double d in dblArray)
{
    System.Console.WriteLine(d);
}

CSV文件内容

10,14,7,1,19,4,15,17,16,5,13,8,18,2,12,9,3,20,6,11
6,10,13,17,4,11,5,14,19,3,9,20,15,8,1,2,18,7,12,16
13,5,11,6,4,10,9,17,19,14,1,16,12,8,7,18,20,2,15,3
2,5,4,14,20,15,3,13,7,1,12,8,19,18,11,10,9,6,16,17

尝试过的其他写法(仍报错)

double[] dblArray = csvFile.Select(s => Convert.ToDouble(s)).ToArray();

问题原因

直接用Split(',')拆分整个文件内容时,文件中的换行符(\r/\n)会被包含在拆分后的字符串元素中(比如第一行末尾的11和第二行开头的6会被合并成"11\n6"这类无法解析为数字的字符串),导致double.Parse或Convert.ToDouble触发格式异常。

解决方法

方法1:按行拆分后再处理(推荐)

先按行读取文件,再逐行拆分逗号,避免跨行的无效字符串:

string[] lines = System.IO.File.ReadAllLines(@"C:\Users\...\Documents\CSVExample.csv");
List<double> dblList = new List<double>();
foreach (string line in lines)
{
    foreach (string part in line.Split(','))
    {
        if (double.TryParse(part, out double num))
        {
            dblList.Add(num);
        }
    }
}
double[] dblArray = dblList.ToArray();

方法2:多分隔符拆分并过滤空元素

拆分时同时指定逗号和换行符作为分隔符,并移除空元素:

char[] separators = { ',', '\r', '\n' };
string[] csvParts = System.IO.File.ReadAllText(@"C:\Users\...\Documents\CSVExample.csv")
    .Split(separators, StringSplitOptions.RemoveEmptyEntries);
double[] dblArray = Array.ConvertAll(csvParts, double.Parse);

方法3:健壮性处理(兼容无效值)

使用double.TryParse跳过无效值,并记录异常内容方便排查:

char[] separators = { ',', '\r', '\n' };
string[] csvParts = System.IO.File.ReadAllText(@"C:\Users\...\Documents\CSVExample.csv")
    .Split(separators, StringSplitOptions.RemoveEmptyEntries);
List<double> validDoubles = new List<double>();
foreach (string part in csvParts)
{
    if (double.TryParse(part, out double num))
    {
        validDoubles.Add(num);
    }
    else
    {
        Console.WriteLine($"无法转换的内容: {part}");
    }
}
double[] dblArray = validDoubles.ToArray();

内容的提问来源于stack exchange,提问作者l4dehh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:23:06