我有一个看起来像的csv:
Column1,Column2,Column3,Column4,Column5,Column6,Column7,Column7,Column8,Column9,
45.50334645,5640192,3915776,52633600,351924224,12354,90505216,78790656,247287808,
39.23091283,5640192,3915776,52633600,349986816,4562,90505216,78790656,247287808,
25.26042,5640192,3915776,52633600,349986816, ,90505216,78790656,247287808,
我需要从每列中获取MIN,MAX和Average。我正在使用LINQ来执行此操作,因为CSV可能非常大。
这是我目前的代码。
var lines = System.IO.File.ReadAllLines(csvPath);
var columns = lines[0].Split(',');
for (int i = 1; i < columns.Count(); i++)
{
var columnQuery = from line in lines
let elements = line.Split(',')
select Convert.ToDouble(elements[i]);
var results = columnQuery.ToList();
var min = results.Min();
var max = results.Max();
var avg = results.Average();
}
这将在csv中突出显示的值上出错,因为它被视为日期时间。
我得到的错误是&#34;输入字符串的格式不正确。&#34;
感谢您的帮助。
答案 0 :(得分:1)
您可以使用三元运算符:
var columnQuery = from line in lines
let elements = line.Split(',')
select string.IsNullOrWhiteSpace(elements[i]) ? 0. : Convert.ToDouble(elements[i]);
答案 1 :(得分:0)
您是否尝试过使用Double.TryParse
代替Convert.ToDouble
来避免异常
或者在where elements[i].Trim() != ""
之前使用select
明确过滤出空行?