C# 在c中获取.csv文件中的特定行和列值#

C# 在c中获取.csv文件中的特定行和列值#,c#,csv,C#,Csv,我有一个.csv文件,如下所示: Index,Time,value 1,0,20 2,1,30 public double GetVal(int row, int column) { ... return val; } 我想做的是在C#中打开.csv文件,然后通过获取row=0,column=0来读取它,在上述情况下,这将为我提供值1。很像这样: Index,Time,value 1,0,20 2,1,30 public double GetVal(int row, int colum

我有一个.csv文件,如下所示:

Index,Time,value
1,0,20
2,1,30
public double GetVal(int row, int column)
{
 ...
 return val;
}
我想做的是在C#中打开.csv文件,然后通过获取
row=0,column=0
来读取它,在上述情况下,这将为我提供值
1
。很像这样:

Index,Time,value
1,0,20
2,1,30
public double GetVal(int row, int column)
{
 ...
 return val;
}
我四处寻找解决方案,例如:


但是我需要能够在函数中指定列和行以获得特定值。

尽管您可以自己编写简单的代码,但我建议您使用专用的CSV库来实现这一点 有很多边缘情况,比如用双引号转义的值,CSV文件格式的多行值

但是如果你完全控制你的文件并且它们很小,你可以一次读取所有的行并解析它们。类似这样的方法可以从文件中获取所有行,然后按“,”字符拆分每行

var lines = File.ReadAllLines('your file');

快速回答,不考虑性能问题(例如,文件读取应发生一次,以及其他问题,如索引检查,以避免溢出)

public double GetVal(int row, int column) 
{
    double output;
    using (var reader = new StreamReader("filename.csv"))
    {
        int m = 1;
        while (!reader.EndOfStream)
        {
            if(m==row)
            {
                var splits = rd.ReadLine().Split(',');
                //You need check the index to avoid overflow
                output = double.Parse(splits[column]);
                return output;
            }

            m++;
        }
    }
    return output;
}

如果CSV文件是简单文件(无引号),您可以尝试Linq:

请注意,此代码将重新读取该文件;您可能希望读取该文件一次:


以一个3r party库为例。然后您将拥有一个列表对象,您可以在其中使用索引和属性名进行nagivate。该行和列更有用。并且只读取一次文件。实际上,.Net中本机有一个CSV解析器;
VisualBasic
命名空间中的
TextFieldParser
。我测试了后一个,它给出了我的答案“System.FormatException:'输入字符串的格式不正确。”@KGB91:
System.FormatException
字符串
不符合预期格式时抛出,例如,当我们对无法转换为
字符串进行
双解析时(
“abcdef”
等)我能不能把所有的东西都当作一个字符串,然后把它转换成一个double呢?@KGB91:是的,我们可以推迟
double.Parse
,我们可以在
GetVal