拆分CSV并保存到对象

时间:2016-08-17 17:49:40

标签: c# csv object

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

Const WHITE = 16777215
Const GRAY = 14540253
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
    If Len(Trim(Me![Text61])) = 0 Then GoTo color_box

    If (Me![LineNum] Mod 2) = 0 Then
        Me![Text60].BackColor = GRAY
        Me![bmnh].BackColor = GRAY
        Me![c_val].BackColor = GRAY
        Me![Text61].BackColor = GRAY
    Else
        Me![Text60].BackColor = WHITE
        Me![c_val].BackColor = WHITE
        Me![Text61].BackColor = WHITE
        Me![bmnh].BackColor = WHITE
    End If

exit_here:
    Exit Sub

color_box:  
    Me![Text61].BackColor = GRAY
End Sub

我用这个文件阅读了文件:

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[]上使用.Split(',')

我还想将信息输入对象

ReadLine()

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

4 个答案:

答案 0 :(得分:3)

我的建议是使用CsvHelper或类似的项目。它可以完成许多读取CSV文件所需的操作,例如转义引号和处理不同类型的分隔符。

答案 1 :(得分:0)

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

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;
     }
}

P.S。解析CSV文件可能比简单地分割逗号要复杂一些。如果你想阅读你自己的解析器的所有规则,维基百科有pretty good list个。

答案 2 :(得分:0)

您可以执行以下操作,这也会返回一个&#39;文件列表&#39;对象:

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;
    }

这当然假设你有一个构造函数用于你的文件&#39;看起来像这样的类:

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

答案 3 :(得分:0)

您只能使用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();