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

C#开发 作者: Rector 22 次阅读 · 读完约需 1 分钟 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在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应用程序编程开发中如何读取CSV文件并将读取到的CSV数据转换成数组格式呢?

发布于: 2019-07-01 16:08:19
分享扩散:

发表评论

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