随身携带下面的代码。
class readFile{
List<double> out1 = new List<double>();
List<double> out2 = new List<double>();
List<double> out3 = new List<double>();
public readFile()
{
}
public void aproCSV()
{
var reader = new StreamReader(File.OpenRead(@"C:\altraprova.csv"));
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(';');
out1.Add(values[0]);
out2.Add(values[1]);
out3.Add(values[2]);
}
}
}
请允许我解释一下我的意图......
我打开我的csv文件
目标是读取第二列并将其插入double类型的列表中,然后获取值MAX。
如果你使用string类型的列表而不是get erors ....但由于这些值只包含你用分号分号的数字,那么我需要使用double类型..使用double类型得到以下错误:
错误5重载方法的最佳匹配
'System.Collections.Generic.List <double> .Add (double)'
有一些 无效的参数
答案 0 :(得分:1)
Split()
返回string[]
,您的列表类型为List<double>
,这意味着您需要将字符串解析为以下双打:
double value1 = double.Parse(values[0]);
等
然后将它们添加到您的列表中:out1.Add(value1);
请注意,您没有错误处理,因此如果该值不是double,则代码仍会抛出exception
。
答案 1 :(得分:1)
CSV出人意料地解析起来并不那么简单,有很多特殊情况需要考虑。例如,如果您的数据包含&#34;分隔字符&#34;您需要将数据放在引号之间(&#34;)。如果他包含引号,那么你必须用反斜杠(\)来逃避它们(或者加倍它们,我不确定)。
所以,除非你知道你要导入的数据并且确定这些情况不会发生,否则简单的&#34;拆分&#34;赢得不够。
我真的建议使用现有的解析器来帮助您完成此任务。我已成功使用CsvHelper。它是一个很好的库,很容易使用。
答案 2 :(得分:0)
您需要进行一些解析,因为通用列表只接受给定类型的元素(在您的情况下为double):
var line = reader.ReadLine();
var values = line.Split(';');
out1.Add(double.Parse(values[0]));
out2.Add(double.Parse(values[1]));
out3.Add(double.Parse(values[2]));
这是一个快速而肮脏的技巧,你应该使用double.TryParse
为了安全起见,因为可能不是你得到的所有东西都是双倍的。
从你的代码我想你需要从列表out2
(你的第二列)获得最大值。为此,请使用List.Max Method