首页 / C#开发 / 正文

C#/.NET应用程序编程开发中如何读取CSV文件并将读取到的CSV数据转换成数组格式呢?

3956 1 发布于: 2019-07-01 读完约需5分钟

问题描述

在C#/.NET应用程序编程开发中,如何读取CSV文件并将读取到的CSV数据转换成数组格式呢?

方案一

使用StreamReader读取指定路径的csv文件,然后逐行进行解析,如下:

using System.IO;

static void Main(string[] args)
{
    using(var reader = new StreamReader(@"C:\test.csv"))
    {
        List<string> listA = new List<string>();
        List<string> listB = new List<string>();
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(';');

            listA.Add(values[0]);
            listB.Add(values[1]);
        }
    }
}

方案二

使用.NET内置的位于命名空间Microsoft.VisualBasic.FileIO中的TextFieldParser解析csv文件,如下:

using Microsoft.VisualBasic.FileIO;

var path = @"C:\Person.csv";
using (TextFieldParser csvParser = new TextFieldParser(path))
{
    csvParser.CommentTokens = new string[] { "#" };
    csvParser.SetDelimiters(new string[] { "," });
    csvParser.HasFieldsEnclosedInQuotes = true;

    // 跳过标题行
    csvParser.ReadLine();

    while (!csvParser.EndOfData)
    {
        string[] fields = csvParser.ReadFields();
        string Name = fields[0];
        string Address = fields[1];
    }
}

方案三

使用LINQ读取csv文件,如下:

var lines = File.ReadAllLines("test.txt").Select(a => a.Split(';'));
var csv = from line in lines
          select (from piece in line
                  select piece);

或者,如果你需要跳过标题行,则可以:

int headerRows = 5;
foreach (var row in csv.Skip(headerRows)
    .TakeWhile(r => r.Length > 1 && r.Last().Trim().Length > 0))
{
    String zerothColumnValue = row[0]; // leftmost column
    var firstColumnValue = row[1];
}

方案四

使用第三方的CsvHelper组件:https://github.com/JoshClose/CsvHelper

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: C#/.NET应用程序编程开发中如何对一个泛型集合进行LINQ动态分组(GroupBy)?

下一篇: C#/.NET应用程序编程开发中如何将一个CSV文件的内容读取到C#的DataTable中呢?

本文永久链接码友网 » C#/.NET应用程序编程开发中如何读取CSV文件并将读取到的CSV数据转换成数组格式呢?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册