C# 在c中获取.csv文件中的特定行和列值#
我有一个.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
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