从 csv 文件中读取并在 .net 中处理它

Reading from a csv file and processing it in .net

我有一个包含 2 行的 csv 文件。

 A,1
 B,2

我想读取这个格式的文件并将其转换为以下格式:

Name : A, ID: 1
Name : B, ID: 2

我正在使用以下 .net api

using (FileStream reader = File.OpenRead(@"Data.csv")) // mind the encoding - UTF8
            using (TextFieldParser parser = new TextFieldParser(reader))
            {
                parser.TrimWhiteSpace = true; // if you want
                parser.Delimiters = new[] { "," };
                parser.HasFieldsEnclosedInQuotes = true;
                while (!parser.EndOfData)
                {
                    string[] line = parser.ReadFields();

                    List<string> li = line.SelectMany(x => x.Split(',')).ToList();


                }
            }

在 li 变量中,我能够在拆分后获得各个元素,例如:A 1,但我不知道如何向其添加键属性,使名称:A,ID:1

编辑:

我最终需要它的列表格式,因为基于它很容易分离实体 例如:

List{
    List1 = Name : A,ID:1
    List2 = Name : B,ID:2
}

我会为此创建结构:

struct ValuePair
{
    public string Name  { get; set; }
    public string Id { get; set; }        

    public ValuePair(string name, string id) : this()
    {
        Name = name;
        Id = id;
    }

    public override string ToString()
    {
        return "Name : " + Name + ", Id : " + Id;
    }
}

并且在您的代码中您可以使用它:

List<ValuePair> data = new List<ValuePair>();
for(int i = 0; i < li.Count; i += 2) 
   data.Add(new ValuePair(li[i], li[i + 1]));

然后使用data[i].ToString();

您需要自己构建输出字符串...

StringBuilder sb = newStringBuilder();
using (FileStream reader = File.OpenRead(@"Data.csv")) // mind the encoding - UTF8
        using (TextFieldParser parser = new TextFieldParser(reader))
        {
            parser.TrimWhiteSpace = true; // if you want
            parser.Delimiters = new[] { "," };
            parser.HasFieldsEnclosedInQuotes = true;
            while (!parser.EndOfData)
            {
                string[] line = parser.ReadFields();

                List<string> li = line.SelectMany(x => x.Split(',')).ToList();

                sb.AppendLine(String.Format("Name: {0}, ID: {1}", li[0],li[1]));

            }
        }
MessageBox.Show(sb.ToString());

请注意,您可能想用 "" 分隔(文本)值(假设您想从新格式中读回),并且您还需要确定合适的转义方案" 当它出现在值中时。 一种常见的方法是将值中的每个 " 替换为 "".

例如 第一值,1 秒"ond"值",2

将映射到

Name: "FirstValue", ID:1
Name: "Sec""ond""Value", ID:2

如果您不这样做,那么从您的新格式回读可能不确定。