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

本文关键字:net 处理 读取 csv 文件 | 更新日期: 2023-09-27 18:02:44

我有一个csv文件,其中有2行。

 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
}

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

我要创建一个struct:

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());

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

如FirstValue 1证券交易委员会"作为对"价值",2

将映射到

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

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