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日

相关文章

  • ASP.NET Core配置设置之Configuration包

    ASP.NET Core配置设置之Configuration包 在ASP.NET Core应用程序中,Configuration包是一个非常重要的包,它允许我们从不同的配置源中读取配置信息,并将其注入到应用程序中。本攻略将介绍如何使用Configuration包,并提供两个示例说明。 1. 安装Configuration包 在ASP.NET Core应用程序…

    C# 2023年5月16日
    00
  • C#连接Informix数据库的问题

    使用C#连接Informix数据库的过程可以分为以下几个步骤: 步骤一:安装Informix客户端SDK Informix客户端SDK包括ODBC和 .NET 数据提供程序等。可以从IBM官网下载对应版本的SDK,安装并配置。 步骤二:创建Informix数据库连接字符串 在C#中,可以通过连接字符串来与Informix数据库建立连接。根据个人需要可以选择使…

    C# 2023年5月15日
    00
  • JS实现问卷星自动填问卷脚本并在两秒自动提交功能

    JS实现问卷星自动填问卷脚本并在两秒自动提交功能需求主要包括两个部分:一是自动填写问卷;二是在两秒钟内自动提交问卷。 自动填写问卷 首先,我们要查看问卷星的页面源代码,找到需要填写的问题的输入框的相关信息,可以使用Chrome开发者工具或者Firefox的Firebug等浏览器扩展工具。 然后,在代码中用JavaScript代码获取到填写的问题的输入框元素,…

    C# 2023年6月6日
    00
  • WPF实现带筛选功能的DataGrid

    接下来我将详细讲解如何使用WPF实现带筛选功能的DataGrid,步骤如下: 步骤一:创建数据源 在WPF项目中,我们需要先创建一个数据源,这个数据源包含我们要显示的数据从哪里来的信息。可以使用C#代码或XAML来创建数据源,例如: public class Person { public string Name { get; set; } public i…

    C# 2023年6月7日
    00
  • C# File.ReadAllBytes(string path):读取指定文件的所有字节内容

    File.ReadAllBytes(string path)是C#中一个用于读取指定文件的字节流并将其以字节数组的形式返回的方法。 作用: 该方法用于将指定文件中的所有字节读入一个字节数组中,并返回该字节数组。可以使用此方法来读取任何类型的文件,包括图像、声音和文本文件等。 使用方法攻略: 要使用File.ReadAllBytes方法,需要在代码中使用以下命…

    C# 2023年4月19日
    00
  • C#正则表达式匹配HTML中的图片路径,图片地址代码

    针对“C#正则表达式匹配HTML中的图片路径,图片地址代码”的问题,以下是完整攻略: 前言 在很多网站中,图片的路径都是通过HTML代码进行定义和获取。而在使用C#开发的网站中,我们可能需要通过正则表达式提取HTML中的图片路径,以便我们可以预览或下载图片。 操作步骤 第一步:获取HTML代码 首先,我们需要获取HTML代码,一种常用的方法是使用HttpWe…

    C# 2023年6月7日
    00
  • 利用FlubuCore用C#来写DevOps脚本的方法详解

    FlubuCore是一个用于构建和部署.NET应用程序的开源工具。它使用C#编写,可以帮助我们编写DevOps脚本,自动化构建和部署过程。在本文中,我们将介绍如何使用FlubuCore编写DevOps脚本,并提供两个示例说明。 安装FlubuCore 在开始之前,我们需要安装FlubuCore。我们可以使用NuGet包管理器或手动下载安装程序包。在Visua…

    C# 2023年5月17日
    00
  • C#判断字符串中是否包含指定字符串及contains与indexof方法效率问题

    C#中判断一个字符串是否包含子字符串是一个常用的任务。本文将讲解如何使用C#的contains和indexof方法来实现这个任务,并探讨它们的效率问题。 contains方法 contains方法是String类中的一种方法,用于判断一个字符串是否包含指定的子字符串。代码示例如下: string str1 = "hello world";…

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