Csv将Read行转换为double

时间:2015-01-30 19:14:18

标签: c#

我正在尝试将csv文件读入数据结构,但我似乎无法将其转换为双重类型。

static void Main(string[] args)
        {
            var reader = new StreamReader(File.OpenRead(@"E:\file.csv"));
            List<Double> close = new List<Double>();

            int counter = 0;


            while (!reader.EndOfStream)
            {
                counter = counter + 1;
                var line = reader.ReadLine();
                var values = line.Split(',');


                string str = values[4];
                Double val = Convert.ToDouble(str); //THIS IS THE PROBLEM

                Console.WriteLine(values[4].GetType());
            }

            // Prompt to Exit
            Console.WriteLine("Press any key to exit.");
            Console.Read();


        }

我收到错误:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

Additional information: Input string was not in a correct format.

values[4]的类型为System.string

2 个答案:

答案 0 :(得分:1)

'System.FormatException'表示由CSV文件中的数据引起的运行时问题,而不是程序代码引起的问题。

这意味着索引4处的项目不代表有效的double值。例如,它可以是空字符串,或其他一些非数字字符串。为了正确诊断此问题,请在Convert.ToDouble(str)的调用周围添加try / catch,并在出现异常时打印该消息:

Double val;
try {
    val = Convert.ToDouble(str);
} catch (FormatException fe) {
    Console.Error.WriteLine("Got {0} when processing '{1}'", fe.Message, str);
}

答案 1 :(得分:1)

使用Double.Parse方法。然后,您可以提供与.csv中的内容相对应的NumberStyles。