分割CSV并保存到对象

本文关键字:对象 保存 CSV 分割 | 更新日期: 2023-09-27 18:03:01

我正在尝试读取CSV文件并将数据保存到要导入数据库的对象中。CSV文件包含以下信息:

Gas Sensor,GS-NO-001,2
Gas Sensor,GS-O2-002,2
Vig,VG-LR-001-FG-003,1

我读这个文件:

public static void CSVReader()
{
    var reader = new StreamReader(File.OpenRead("C:''PO-02.csv"));
    reader.ReadLine();
    int counter = 0;
    string line;
    System.IO.StreamReader file = new System.IO.StreamReader("C:''PO-02.csv");
    while ((line = file.ReadLine()) != null)
    {
        Console.WriteLine(line);
        counter++;
    }
    file.Close();
}

但是我不能让.Split(',')使用这种阅读方法来实际拆分数据。我试图使string[]来保存数据,以及在ReadLine()上使用.Split(',')

我还想将信息输入到对象

public class files
    {
        public string product_name { get; set; }
        public string part_number { get; set; }
        public string quantity { get; set; }
    }

我的问题是如何分割数据并将其保存到对象?

分割CSV并保存到对象

我建议使用CsvHelper或类似的项目。它做了很多读取CSV文件所需的事情,比如转义引号和处理不同类型的分隔符。

也许我错过了什么,但我不确定为什么这对你不起作用:

public static List<string[]> CSVReader()
{
    using (var reader = new StreamReader(File.OpenRead("C:''PO-02.csv"))
    {
        var csv = new List<string[]>();
        reader.ReadLine();
        int counter = 0;
        string line;
        using (StreamReader file = new StreamReader("C:''PO-02.csv"))
        {
            while ((line = file.ReadLine()) != null)
            {
                list.Add(line.Split(','))
                counter++;
            }
        }
        return list;
     }
}

注:解析CSV文件可能比简单地用逗号分隔要复杂一些。如果您想为自己的解析器阅读所有规则,Wikipedia有一个很好的规则列表。

您可以执行以下操作,这也将返回给您一个'files'对象列表:

public static List<files> CSVReader()
    {
        var reader = new StreamReader(File.OpenRead("C:''PO-02.csv"));
        reader.ReadLine();
        int counter = 0;
        string line;
        System.IO.StreamReader file = new System.IO.StreamReader("C:''PO-02.csv");
        // Create a list to hold your 'files' objects
        List<files> items = new List<files>();
        while ((line = file.ReadLine()) != null)
        {
            Console.WriteLine(line);
            // Add a new 'files' object to your list by passing it the split csv line
            string[] data = line.split(",");
            items.Add(new files(data));
            counter++;
        }
        file.Close();
        return items;
    }

这当然假设你有一个构造函数为你的'files'类,看起来像这样:

public files(string[] data)
{
    product_name = data[0];
    part_number = data[1];
    quantity = data[2];
}

只能使用Linq。

var result = File.ReadLines("C:''PO-02.csv")
                 .Select(line => {
                     var chunk = line.Split(',');
                     return new files
                     {
                         product_name = chunk[0],
                         part_number = chunk[1],
                         quantity = chunk[2]
                     };
                 }).ToList();