C#导出数据到CSV文件的通用类实例

下面我将详细讲解“C#导出数据到CSV文件的通用类实例”的完整攻略,过程中将会包含两条示例说明。

前言

CSV (Comma Separated Values) 文件是一种通用的数据交换格式,它能很好地被许多程序读取。在本文中,我们将会学习如何用 C# 导出数据到 CSV 文件中,这将会涉及以下几个步骤:

  1. 创建 CSV 文件
  2. 将数据存入 CSV 文件
  3. 转义数据
  4. 读取 CSV 文件

创建 CSV 文件

在 C# 中,创建一个 CSV 文件并不难。首先,我们需要引入以下几个命名空间:

using System.IO;
using System.Text;

然后,我们可以定义一个 CSV 文件的路径:

string csvFilePath = "path/to/file.csv";

接下来,我们可以创建一个 StreamWriter 对象,用于写入数据到 CSV 文件中:

using (StreamWriter sw = new StreamWriter(csvFilePath, false, Encoding.UTF8))
{
    // Write data to CSV file
}

在代码中,我们使用 StreamWriter 类创建一个写入流,参数 false 表示在写入文件时不要追加,Encoding.UTF8 表示使用 UTF-8 编码写入数据。

将数据存入 CSV 文件

在创建好 CSV 文件后,现在我们需要将数据存入其中。通常情况下,我们会将数据表头和数据记录以逗号为分隔符拼成一行,然后在写入 CSV 文件时将每行数据用换行符分隔。

下面是其中一个示例,假设数据存储在一个 List 对象中,数据表头为 NameAge

// Define data
List<string> headers = new List<string> { "Name", "Age" };
List<List<string>> data = new List<List<string>> {
    new List<string> { "John", "20" },
    new List<string> { "Mike", "25" },
    new List<string> { "Lucy", "22" },
};

// Write data to CSV file
using (StreamWriter sw = new StreamWriter(csvFilePath, false, Encoding.UTF8))
{
    // Write headers
    sw.Write(string.Join(",", headers));
    sw.Write(sw.NewLine);

    // Write data
    foreach (var row in data)
    {
        sw.Write(string.Join(",", row));
        sw.Write(sw.NewLine);
    }
}

在代码中,我们首先定义了数据表头和数据记录。然后,我们使用 StreamWriter 写入数据到 CSV 文件中。我们首先写入数据表头,用 string.Join 方法将表头列表中的所有元素以逗号拼接为一个字符串,然后用 StreamWriter.Write 方法写入到文件中,并在末尾加上一个换行符。接着,我们使用 foreach 循环遍历数据记录列表,用 string.Join 方法将每行数据(也就是一个 List<string> 对象)中的所有元素以逗号拼接为字符串,然后写入到 CSV 文件中,并在末尾加上一个换行符。

转义数据

在将数据存入 CSV 文件时,我们需要对某些特殊字符进行转义,以保证 CSV 文件的正确性。常见的特殊字符包括逗号(,)、双引号(")和换行符(\n)等。当某个数据记录中包含了这些特殊字符时,我们需要对其进行转义,以避免出现错误。

下面是一个示例,当数据表中的某条记录中包含逗号和双引号时,我们需要对其进行转义:

List<string> row = new List<string> { "John,Doe", "20", "\"a\"b\"" };
string rowData = string.Join(",", row.Select(s => "\"" + s.Replace("\"", "\"\"") + "\""));
// Output: John,Doe,20,"""a""b"""

在代码中,我们定义了一个数据记录 row,其中包含了逗号和双引号。我们用 string.Join 方法将 row 中的元素以逗号拼接为一个字符串,然后对其中的所有双引号进行了转义(替换为两个双引号)。

读取 CSV 文件

除了导出数据到 CSV 文件中,我们还需要能够读取 CSV 文件中的数据。要实现这个功能,我们可以使用 C# 中自带的 TextFieldParser 类来解析 CSV 文件。

下面是一个示例,假设我们需要读取一个名为 data.csv 的 CSV 文件中的数据:

using Microsoft.VisualBasic.FileIO;

string csvFilePath = "path/to/file.csv";
List<string> headers = new List<string>();
List<List<string>> data = new List<List<string>>();

using (TextFieldParser parser = new TextFieldParser(csvFilePath, Encoding.UTF8))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");

    bool isFirstRow = true;
    while (!parser.EndOfData)
    {
        string[] fields = parser.ReadFields();

        if (isFirstRow)
        {
            headers = fields.ToList();
            isFirstRow = false;
        }
        else
        {
            data.Add(fields.ToList());
        }
    }
}

在代码中,我们首先定义了 CSV 文件的路径,然后创建了一个空的数据表头列表和数据记录列表。接着,我们使用 TextFieldParser 类读取 CSV 文件中的数据。我们首先指定了字段分隔符和字段类型,然后使用 ReadFields 方法逐行读取 CSV 文件中的数据。我们判断读取的是否为表头行,如果是则将其作为表头存储到 headers 列表中,否则将其作为一行记录存储到 data 列表中。

示例说明

我们已经完成了关于“C#导出数据到CSV文件的通用类实例”的完整攻略。下面给出两个示例来说明如何使用上述代码。

示例一:导出数据到 CSV 文件

假设我们已经有了一个数据表 users,其中包含每个用户的姓名、年龄和手机号码。现在我们需要将这个数据表的内容导出到一个名为 users.csv 的 CSV 文件中。

下面是示例代码:

// Define data
var users = new List<Dictionary<string, string>> {
    new Dictionary<string, string> { { "Name", "John" }, { "Age", "20" }, { "Phone", "123456" } },
    new Dictionary<string, string> { { "Name", "Mary" }, { "Age", "25" }, { "Phone", "234567" } },
    new Dictionary<string, string> { { "Name", "Lucy" }, { "Age", "22" }, { "Phone", "345678" } },
};
var headers = new List<string> { "Name", "Age", "Phone" };

// Write data to CSV file
using (StreamWriter sw = new StreamWriter("users.csv", false, Encoding.UTF8))
{
    // Write headers
    sw.Write(string.Join(",", headers));
    sw.Write(sw.NewLine);

    // Write data
    foreach (var user in users)
    {
        var row = new List<string>();
        foreach (var header in headers)
        {
            var value = user.ContainsKey(header) ? user[header] : "";
            row.Add(value);
        }
        sw.Write(string.Join(",", row));
        sw.Write(sw.NewLine);
    }
}

在代码中,我们首先定义了数据表 users 和数据表头 headers。然后,我们使用 StreamWriter 类将数据导出到 CSV 文件中。我们首先写入数据表头,然后遍历数据表 users 中的每一行,将其中的每一个元素按照表头顺序插入到一个新的列表中,并将所有元素拼接成一个字符串,然后写入到 CSV 文件中。

示例二:读取 CSV 文件中的数据

假设我们已经创建好了一个名为 users.csv 的 CSV 文件,其中包含每个用户的姓名、年龄和手机号码。现在我们需要从这个文件中读取数据,并存储为一个数据表 users

下面是示例代码:

// Read data from CSV file
string csvFilePath = "users.csv";
List<string> headers = new List<string>();
List<Dictionary<string, string>> users = new List<Dictionary<string, string>>();

using (TextFieldParser parser = new TextFieldParser(csvFilePath, Encoding.UTF8))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");

    bool isFirstRow = true;
    while (!parser.EndOfData)
    {
        string[] fields = parser.ReadFields();

        if (isFirstRow)
        {
            headers = fields.ToList();
            isFirstRow = false;
        }
        else
        {
            var user = new Dictionary<string, string>();
            for (int i = 0; i < fields.Length; i++)
            {
                user.Add(headers[i], fields[i]);
            }
            users.Add(user);
        }
    }
}

// Print users
foreach (var user in users)
{
    Console.WriteLine("Name: {0}, Age: {1}, Phone: {2}", user["Name"], user["Age"], user["Phone"]);
}

在代码中,我们使用 TextFieldParser 类读取 CSV 文件中的数据。我们首先指定了字段分隔符和字段类型,然后使用 ReadFields 方法逐行读取 CSV 文件中的数据。我们判断读取的是否为表头行,如果是则将其存储到 headers 列表中,否则将其转化为一个字典,将字典存储到 users 列表中。最后,我们遍历 users 列表,将其中的每个元素按照需求输出到控制台上。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#导出数据到CSV文件的通用类实例 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • PC蓝牙通信C#代码实现

    下面将详细讲解“PC蓝牙通信C#代码实现”的完整攻略: 1. 前置知识 在开始进行PC蓝牙通信C#代码实现之前,需要了解以下前置知识: C#编程语言基础知识。 .NET Framework类库中与蓝牙通信相关的命名空间和类,例如System.IO.Ports和System.Threading等。 能够使用C#编写简单的串口通信程序。 掌握蓝牙通信协议和通信方…

    C# 2023年6月6日
    00
  • 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。

    这个错误提示通常表示程序在加载某个DLL文件时出现了问题,这个DLL文件可能是应用程序的依赖项之一,或者是应用程序本身的一部分。以下是解决这个错误的一些常见步骤: 1. 检查DLL文件的位数 如果应用程序是64位的,那么它需要使用64位的DLL文件。如果应用程序是32位的,那么它需要使用32位的DLL文件。如果你将不同位数的DLL文件混合使用会导致这个错误,…

    C# 2023年5月15日
    00
  • C#访问及调用类中私有成员与方法示例代码

    很好,下面我来详细讲解“C#访问及调用类中私有成员与方法示例代码”的完整攻略。 什么是C#中的私有成员 在C#面向对象的编程语言中,类是一个重要的概念,一个类中可能包含多个不同类型的成员,包括字段、属性、方法等。其中,私有成员是指仅限于本类中访问和调用的成员,其他类或代码无法直接访问或调用这些私有成员。 如何访问C#中的私有成员 在C#中,可以通过反射机制来…

    C# 2023年6月7日
    00
  • 详解C#如何实现树形图列表

    下面是详解“详解C#如何实现树形图列表”的完整攻略。 1. 准备工作 在实现树形图列表之前,需要确保已经有一个能够与数据库交互的C#工程并能够成功地从数据库中获取数据。此外,我们还需要一个能够在前端界面展示数据结构的控件,常用的控件包括TreeView和DataGrid。 2. 数据库中存储数据结构 在数据库中,我们可以使用关系型、非关系型或基于图的数据库来…

    C# 2023年6月6日
    00
  • Unity ScrollView实现自动吸附效果

    我将详细讲解一下“Unity ScrollView实现自动吸附效果”的完整攻略。 一、准备工作 创建一个空的Unity项目 创建一个Canvas,将Canvas的Render Mode设置为Screen Space – Overlay 在Canvas下面创建一个ScrollView,将ScrollView的Content的Layout Group设置为Ver…

    C# 2023年6月3日
    00
  • C#遍历DataSet控件实例总结

    C#遍历DataSet控件实例总结 介绍 在C#语言中,DataSet是一个非常常用的控件,用于处理数据库查询结果。我们经常需要遍历DataSet来获取其中的数据,因此掌握遍历DataSet的方法非常重要。 本文将介绍如何在C#中遍历DataSet控件,并提供两个示例来说明具体的代码实现。 方法和示例 1. 使用foreach遍历 使用foreach遍历Da…

    C# 2023年5月31日
    00
  • C# String.Compare()方法: 比较两个指定的字符串并返回它们之间的关系

    String.Compare() 是C#中用于比较两个字符串的方法。该方法将比较两个字符串,并根据其字典排序顺序返回一个整数值。返回的整数值将指示字符串是否相等,以及它们在字典排序中的相对位置。 方法签名 以下是方法的签名: public static int Compare(string strA, string strB, bool ignoreCase…

    C# 2023年4月19日
    00
  • 解析C#网络编程中的Http请求

    解析C#网络编程中的Http请求可以分为以下几个步骤: 1. 构造HttpWebRequest对象 在C#网络编程中,我们使用HttpWebRequest对象来发起一次HTTP请求。构造HttpWebRequest对象需要指定请求的URL、请求方法等参数。下面是一个构造HttpWebRequest对象的示例代码: HttpWebRequest request…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部