C# 根据标题从CSV获取值
我有一个包含此数据的csv文件C# 根据标题从CSV获取值,c#,csv,C#,Csv,我有一个包含此数据的csv文件 Price,volume,"Local, Zones 1 & 2",Zone 3,Zone 4,Zone 5,Zone 6,Zone 7,Zone 8,Zone 9 1,0.1,4.58,4.65,4.74,4.99,5.23,5.47,5.82,6.98 2,0.2,4.99,5.12,5.28,5.5,5.7,5.91,6.3,7.56 3,0.3,5.22,5.61,6.12,7.64,8.39,9.09,9.96,11.94 4,0.4,5.4,6
Price,volume,"Local, Zones 1 & 2",Zone 3,Zone 4,Zone 5,Zone 6,Zone 7,Zone 8,Zone 9
1,0.1,4.58,4.65,4.74,4.99,5.23,5.47,5.82,6.98
2,0.2,4.99,5.12,5.28,5.5,5.7,5.91,6.3,7.56
3,0.3,5.22,5.61,6.12,7.64,8.39,9.09,9.96,11.94
4,0.4,5.4,6.31,7.24,9.13,10.73,11.77,13.26,15.91
5,0.5,6.18,7.21,8.35,11.5,13.41,14.82,16.97,20.36
现在我想根据体积和分区来检索值。如果体积为0.1,分区为1,那么我应该得到值4.58。同样,如果体积为0.5,xone为2,那么值应该是6.18
在c语言中如何实现这一点?虚拟方式,因为文件格式不会改变,csv文件是有效的
int zone = 1;
double value = 0.1;
int zoneColumnIndex = Math.Max(zone, 2);
string valueString = value.ToString(CultureInfo.InvariantCulture);
string result = File.ReadLines("sample.txt")
.Skip(1)
.Select(s => s.Split(','))
.Where(t => t[1] == valueString)
.Select(t => t[zoneColumnIndex])
.FirstOrDefault();
将值放入数组或列表中的步骤
var reader = new StreamReader(File.OpenRead(@"C:\test.csv"));
List<string> listA = new List<string>();
int i = 0;
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
listA.Add(values[i]);
i += 1;
}
如果我是你,我会看着LinqToExcel。然后你可以这样做:
var csv = new LinqToExcel.ExcelQueryFactory(csvFile);
var query =
from row in csv.Worksheet()
let Volume = row["volume"].Cast<double>()
where Volume == 0.1
select new
{
Price = row["Price"].Cast<int>(),
Volume,
Local = row["Local, Zones 1 & 2"].Cast<decimal>(),
Zone3 = row["Zone 3"].Cast<decimal>(),
//etc
};
去图书馆看看,像这样的东西会让人震撼!有一些好的.NET库用于读取支持此行为的CSV文件。我不记得我过去用过的那个名字了,但是谷歌搜索一下应该会给你带来一些东西。我相信这就是我用过的:价格栏告诉你“区域”了吗?如果是这样,那么只需将其用作价格列集合的索引即可。您可以在linq或switch语句中执行此操作。我支持使用FileHelpers。您能否告诉我必须为LinqToExcel添加哪个命名空间。@sindhujampani-您需要通过NuGet添加它。在NuGet中搜索LinqToExcel.NuGet和NuGet.core是否相同?@sindhujampani-我不知道什么是NuGet.core。我说的是,当你在VisualStudio中右键单击一个项目时,你会得到Manage NuGet包。。。菜单项。然后在该对话框中搜索LinqToExcel。
var csv = new LinqToExcel.ExcelQueryFactory(csvFile);
var query =
from row in csv.Worksheet()
let Volume = row["volume"].Cast<double>()
where Volume == 0.1
select new
{
Price = row["Price"].Cast<int>(),
Volume,
Local = row["Local, Zones 1 & 2"].Cast<decimal>(),
Zone3 = row["Zone 3"].Cast<decimal>(),
//etc
};