【问题标题】:Get data form csv file to dictionary从 csv 文件中获取数据到字典
【发布时间】:2014-08-07 13:35:56
【问题描述】:

我找到了一些答案,但不是 mit CSV 格式。我想读取我的 data.csv 文件的 1. 和 5. 位置并将其存储在字典中:

4096,1000,-,-,Berkeley Trailer nego,[Neil_Sembower]
4097,1001-100F,-,-,Berkeley Trailer encap/IP,[Neil_Sembower]
5632,1600,-,-,Valid Systems,[Neil_Sembower]
16962,4242,-,-,PCS Basic Block Protocol,[Neil_Sembower]
21000,5208,-,-,BBN Simnet,[Neil_Sembower]
24576,6000,-,-,DEC Unassigned (Exp.),[Neil_Sembower]

示例

我需要来自 4097 的字符串:

4097,1001-100F,-,-,Berkeley Trailer encap/IP,[Neil_Sembower]

= Berkeley Trailer encap/I


所以我需要一个带有 1. 和 5. 位置的字典(1. key / 5. value)

有人知道我该怎么做吗?

【问题讨论】:

  • 您有两行没有键。不能把它放在字典里。
  • 你可以使用github.com/JoshClose/CsvHelper来解析CSV文件
  • 如果您愿意跳过没有键的记录,那么您可以简单地将其作为 CSD 解析为某种类文件。然后遍历这些类记录和那些带有密钥存储到字典的记录
  • 您可以使用 .Split() 方法指定 ',' 作为分隔符;或者您可以使用正则表达式来检索数据
  • 我已经编辑了问题

标签: c# .net csv dictionary


【解决方案1】:

这是一种可能的方法:

var pathToCSV = @"C:\...\file.csv"; //define path of csv file here
var lines = File.ReadLines(pathToCSV);  
var dictionary = lines.Select(line => line.Split(',')).ToDictionary(data => data[0], data => data[4]);

当然可以更短:

var dictionary = File.ReadLines(@"C:\...\file.csv").Select(line => line.Split(',')).ToDictionary(data => data[0], data => data[4]);

【讨论】:

  • 我不会简单地依赖 string.Split() 来解析 CSV 文件。在许多情况下并不是那么简单 - 例如,您必须处理转义的分隔符。与其重新发明轮子并编写自己的(可能有问题的)CSV 解析器,不如使用一个经过良好测试的解析器,例如:github.com/JoshClose/CsvHelper。此外,File.ReadLines() 当然应该只用于内存使用不成问题的非常小的文件。
  • 在他的示例和他的问题中,没有使用转义字符的迹象。不要将 ReadAllLines 与 ReadLines 混为一谈,因为 ReadLines 不会将所有行都保存到内存中。否则你当然是对的
  • 为我工作,谢谢。最后一个问题。为什么要投票,我的问题有什么问题? :)
  • 不是我,但可能是因为语言和缺少研究工作的迹象^^
【解决方案2】:

试试这个:

var reader = new StreamReader(File.OpenRead(@"data.csv"));
var dic = new Dictionary<int, string>();

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

    if (!String.IsNullOrEmpty(values[0]))
    {
        var id = Convert.ToInt32(values[0]);

        if (!String.IsNullOrEmpty(values[4]))
        {
            dic.Add(id, values[4]);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2021-09-04
    • 2021-08-20
    • 1970-01-01
    • 2013-05-12
    相关资源
    最近更新 更多