Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据标题从CSV获取值_C#_Csv - Fatal编程技术网

C# 根据标题从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

我有一个包含此数据的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.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
    };