在.NET中读取CSV文件?

Jan*_*jay 45 .net c# browser csv

如何使用C#读取CSV文件?

wah*_*eit 58

不使用第三方组件的选择是使用该类Microsoft.VisualBasic.FileIO.TextFieldParser(http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx).它提供了解析CSV的所有功能.导入Microsoft.VisualBasic程序集就足够了.

var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(file);
parser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
parser.SetDelimiters(new string[] { ";" });

while (!parser.EndOfData)
{
    string[] row = parser.ReadFields();
    /* do something */
}
Run Code Online (Sandbox Code Playgroud)

  • 对于读取CSV文件并自己提供解析,这是理想的选择。简单但功能齐全,包括多行中引用的值。 (2认同)

kom*_*bsh 21

您可以在C#中使用Microsoft.VisualBasic.FileIO.TextFieldParser类:

using System;
using System.Data;
using Microsoft.VisualBasic.FileIO;

static void Main()
{
    string csv_file_path = @"C:\Users\Administrator\Desktop\test.csv";

    DataTable csvData = GetDataTableFromCSVFile(csv_file_path);

    Console.WriteLine("Rows count:" + csvData.Rows.Count);    
    Console.ReadLine();
}

private static DataTable GetDataTableFromCSVFile(string csv_file_path)
{
    DataTable csvData = new DataTable();

    try
    {
        using(TextFieldParser csvReader = new TextFieldParser(csv_file_path))
        {
            csvReader.SetDelimiters(new string[] { "," });
            csvReader.HasFieldsEnclosedInQuotes = true;
            string[] colFields = csvReader.ReadFields();

            foreach (string column in colFields)
            {
                DataColumn datecolumn = new DataColumn(column);
                datecolumn.AllowDBNull = true;
                csvData.Columns.Add(datecolumn);
            }

            while (!csvReader.EndOfData)
            {
                string[] fieldData = csvReader.ReadFields();
                //Making empty value as null
                for (int i = 0; i < fieldData.Length; i++)
                {
                    if (fieldData[i] == "")
                    {
                        fieldData[i] = null;
                    }
                }

                csvData.Rows.Add(fieldData);
             }
         }
     }
     catch (Exception ex)
     {
     }

     return csvData;
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*ose 7

您可以尝试CsvHelper,这是我工作的项目.它的目标是使读取和写入CSV文件尽可能简单,同时速度非常快.

您可以从CSV文件中读取以下几种方法.

// By type
var records = csv.GetRecords<MyClass>();
var records = csv.GetRecords( typeof( MyClass ) );

// Dynamic
var records = csv.GetRecords<dynamic>();

// Using anonymous type for the class definition
var anonymousTypeDefinition =
{
    Id = default( int ),
    Name = string.Empty,
    MyClass = new MyClass()
};
var records = csv.GetRecords( anonymousTypeDefinition );
Run Code Online (Sandbox Code Playgroud)


Mic*_*rly 7

我通常使用这样一种简单的方法:

var path = Server.MapPath("~/App_Data/Data.csv");
var csvRows = System.IO.File.ReadAllLines(path, Encoding.Default).ToList();

foreach (var row in csvRows.Skip(1))
{
    var columns = row.Split(';');

    var field1 = columns[0];
    var field2 = columns[1];
    var field3 = columns[2];
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*uła 1

您可能对CodeProject上的 Linq2Csv 库感兴趣。您需要检查的一件事是,它是否仅在需要时读取数据,这样在处理较大的文件时就不需要大量内存。

至于在浏览器上显示数据,您可以做很多事情来完成它,如果您更具体地了解您的要求,答案可能更具体,但您可以做的事情: 1.
使用 HttpListener 类编写简单的Web 服务器(您可以在网上找到许多示例来托管迷你 http 服务器)。
2.使用Asp.Net或Asp.Net Mvc,创建一个页面,使用IIS托管它。