C#读取CSV文件的方法总结

 更新时间:2024年05月29日 10:11:59   作者:白话Learning  
CSV文件是一种简单的文本文件格式,用于存储表格数据,在C#中,有多种方法可以用于读取CSV文件,本文将介绍几种常见的读取CSV文件的方法,包括使用System.IO命名空间中的类、使用CsvHelper库以及使用LINQ,需要的朋友可以参考下

前言

CSV(Comma-Separated Values,逗号分隔值)文件是一种简单的文本文件格式,用于存储表格数据。在C#中,有多种方法可以用于读取CSV文件。本文将介绍几种常见的读取CSV文件的方法,包括使用System.IO命名空间中的类、使用CsvHelper库以及使用LINQ。

1. 使用System.IO命名空间中的类

System.IO命名空间提供了基本的文件读取功能。以下是一个使用StreamReader读取CSV文件的基本示例:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "example.csv";
        string line;
        Encoding encoding = Encoding.UTF8; // 设置文件编码方式

        // 使用 StreamReader 读取 CSV 文件
        using (StreamReader reader = new StreamReader(filePath, encoding))
        {
            while ((line = reader.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
        }
    }
}

在这个示例中,我们使用StreamReader类读取CSV文件,并设置了文件的编码方式为UTF-8。你可以根据实际需求更改编码方式,如GBK等。

2. 处理标题行和指定列

CSV文件通常包含标题行,以下是一个读取标题行和指定列的示例:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "example.csv";
        string line;
        Encoding encoding = Encoding.UTF8; // 设置文件编码方式

        // 使用 StreamReader 读取 CSV 文件
        using (StreamReader reader = new StreamReader(filePath, encoding))
        {
            // 读取标题行
            var header = reader.ReadLine();
            var headers = header.Split(',');

            // 读取指定列
            while ((line = reader.ReadLine()) != null)
            {
                var fields = line.Split(',');
                Console.WriteLine($"{headers[0]}: {fields[0]}, {headers[1]}: {fields[1]}");
            }
        }
    }
}

在这个示例中,我们首先读取标题行,然后使用标题行中的列名输出指定列的数据。

3. 使用CsvHelper库

CsvHelper是一个流行的第三方库,用于处理CSV文件。首先,你需要在项目中安装CsvHelper包,可以通过NuGet包管理器进行安装:

Install-Package CsvHelper

然后,使用CsvHelper的CsvReader类读取CSV文件:

using CsvHelper;
using CsvHelper.Configuration;
using System;

class Program
{
    static void Main()
    {
        string filePath = "example.csv";
        var config = new CsvConfiguration { HasHeaderRecord = true };

        // 使用 CsvReader 读取 CSV 文件
        using (var reader = new CsvReader(File.OpenRead(filePath), config))
        {
            var records = reader.GetRecords<dynamic>();
            foreach (var record in records)
            {
                Console.WriteLine($"{record.Field1}, {record.Field2}, {record.Field3}");
            }
        }
    }
}

在这个示例中,我们使用CsvReader类读取CSV文件,并使用GetRecords()方法将记录转换为动态对象。

4. 高级功能和异常处理

在使用CsvHelper库时,你可以采取一些高级功能,如数据验证或异常处理。以下是一个示例:

using CsvHelper;
using CsvHelper.Configuration;
using System;

class Program
{
    static void Main()
    {
        string filePath = "example.csv";
        var config = new CsvConfiguration { HasHeaderRecord = true };
          // 使用 CsvReader 读取 CSV 文件
        using (var reader = new CsvReader(File.OpenRead(filePath), config))
        {
            reader.Read();
            // 验证标题行
            if (reader.HeaderRecord.Any(header => header == "InvalidField"))
            {
                throw new InvalidDataException("CSV文件包含无效字段。");
            }

            var records = reader.GetRecords<dynamic>();
            foreach (var record in records)
            {
                // 验证记录
                if (record.Field1 == "InvalidValue")
                {
                    throw new InvalidDataException("CSV文件包含无效值。");
                }
                Console.WriteLine($"{record.Field1}, {record.Field2}, {record.Field3}");
            }
        }
    }
}

在这个示例中,我们首先读取标题行,然后验证标题行和记录中的字段是否包含无效数据。如果包含无效数据,我们将抛出异常。

5. 使用 LINQ

LINQ(Language Integrated Query)提供了一种简洁的方式来进行数据查询。以下是一个使用 LINQ 读取 CSV 文件的示例:

using System;
using System.Linq;
using System.IO;

class Program
{
    static void Main()
    {
        string filePath = "example.csv";
        string[] lines = File.ReadAllLines(filePath);

        foreach (var line in lines)
        {
            string[] fields = line.Split(',');
            Console.WriteLine($"{fields[0]}, {fields[1]}, {fields[2]}");
        }
    }
}

在这个示例中,我们使用 File.ReadAllLines() 方法读取 CSV 文件的所有行,然后使用 Split() 方法分割每一行的字段,并输出到控制台。

6. 总结

在C#中,有多种方法可以用于读取CSV文件,包括使用System.IO命名空间中的类、使用CsvHelper库以及使用LINQ。你可以根据具体的需求和场景选择最适合的方法。希望本文能够帮助你更好地理解和使用这些方法。

在实际应用中,读取CSV文件时需要注意以下几点:

  1. 确保文件的编码方式与代码中的编码方式一致,否则可能导致乱码。
  2. 如果CSV文件中的数据包含特殊字符(如逗号、引号等),可能需要进行转义处理。
  3. 使用第三方库(如CsvHelper)时,确保已经安装了相应的包,并正确引用了相关的命名空间。
  4. 在处理CSV文件时,考虑数据的验证和异常处理,以确保程序的稳定性和数据的准确性。

到此这篇关于C#读取CSV文件的方法总结的文章就介绍到这了,更多相关C#读取CSV文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解StackExchange.Redis通用封装类分享

    详解StackExchange.Redis通用封装类分享

    这篇文章主要介绍了详解StackExchange.Redis通用封装类分享 ,详细的介绍了StackExchange.Redis通用封装,具有一定的参考价值,有需要的可以了解一下。
    2016-12-12
  • C#中结构(struct)的部分初始化和完全初始化实例分析

    C#中结构(struct)的部分初始化和完全初始化实例分析

    这篇文章主要介绍了C#中结构(struct)的部分初始化和完全初始化,通过实例分析了结构初始化中常见的错误及技巧,有助于加深对C#结构(struct)的认识,需要的朋友可以参考下
    2014-09-09
  • C#中时间类的使用方法详解

    C#中时间类的使用方法详解

    这篇文章主要介绍C#中的时间类,文中主要介绍了DateTime类,TimeSpan类,DateTimeOffset类及静态类的封装,通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • C# Hashtable/Dictionary写入和读取对比详解

    C# Hashtable/Dictionary写入和读取对比详解

    本文中将从基础角度讲解HashTable、Dictionary的构造和通过程序进行插入读取对比
    2013-11-11
  • C#实现合并多个word文档的方法

    C#实现合并多个word文档的方法

    这篇文章主要介绍了C#实现合并多个word文档的方法,是C#针对Word文档操作的一个非常重要的技巧,需要的朋友可以参考下
    2014-09-09
  • C#基础:Equals()与运算符==的区别分析

    C#基础:Equals()与运算符==的区别分析

    本篇文章是对c#中的Equals()与运算符==的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#Url操作类封装、仿Node.Js中的Url模块实例

    C#Url操作类封装、仿Node.Js中的Url模块实例

    这篇文章主要介绍了C#Url操作类封装、仿Node.Js中的Url模块,实例分析了C#Url操作类封装的技巧,非常具有实用价值,需要的朋友可以参考下。
    2016-10-10
  • C#基于正则去掉注释的方法示例

    C#基于正则去掉注释的方法示例

    这篇文章主要介绍了C#基于正则去掉注释的方法,结合简单实例形式分析了C#针对注释符号的正则匹配相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • C#中多种高效定时器方法的使用详解

    C#中多种高效定时器方法的使用详解

    本文主要介绍了C#中多种高效定时器方法的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • C# 实现Scoket心跳机制的方法

    C# 实现Scoket心跳机制的方法

    这篇文章主要介绍了C# 实现Scoket心跳机制的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论