问题描述
在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
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册