当前位置: 首页 > news >正文

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

文章目录

  • 1. 使用System.IO命名空间中的类
  • 2. 处理标题行和指定列
  • 3. 使用CsvHelper库
  • 4. 高级功能和异常处理
  • 5. 使用 LINQ
  • 6. 总结

在这里插入图片描述


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 文件的方法汇总

文章目录 1. 使用System.IO命名空间中的类2. 处理标题行和指定列3. 使用CsvHelper库4. 高级功能和异常处理5. 使用 LINQ6. 总结 CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔值&#xff09;文件是一种简单的文本文件格式&#xff0c;用于存储表格数据。在C#中&a…...

element+ 引入图标报错 Failed to resolve import “@element-plus/icons-vue“ from “

element 引入图标报错 Internal server error: Failed to resolve import “element-plus/icons-vue” from “src\components\TimeLine.vue”. Does the file exist? 原因&#xff1a;element-plus需要单独引入 icons 文档 pnpm install element-plus/icons-vue之后就可以…...

Github 2024-05-25 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3TypeScript项目3非开发语言项目1HTML项目1Rust项目1Go项目1Jupyter Notebook项目1Java项目1Angular文档:交付Web应用程序的自信之选…...

VPN的详细理解

VPN&#xff08;Virtual Private Network&#xff0c;虚拟私人网络&#xff09;是一种在公共网络上建立加密通道的技术&#xff0c;通过这种技术可以使远程用户访问公司内部网络资源时&#xff0c;实现安全的连接和数据传输。以下是对VPN的详细介绍&#xff1a; 选择代理浏览器…...

java后端轮播图的设计

对于表示轮播图位置这种有限且较小范围的数据&#xff0c;一般可以使用整数类型来表示。考虑到位置序号一般是非负整数且数量较少&#xff0c;可以选择使用小范围的整数类型&#xff0c;如下&#xff1a; 整数类型: 对于Java中&#xff0c;可以考虑使用 int 类型来表示位置序号…...

upload-labs 21关解析

目录 一、代码审计 二、实践 三、总结 一、代码审计 $is_upload false; $msg null; if(!empty($_FILES[upload_file])){//检查MIME$allow_type array(image/jpeg,image/png,image/gif);if(!in_array($_FILES[upload_file][type],$allow_type)){$msg "禁止上传该类型…...

常用汇编指令

&#xff08;arg&#xff09;argument&#xff1a;自变量&#xff0c;变元 &#xff08;reg&#xff09;register&#xff1a;寄存器 &#xff08;seg&#xff09;segment&#xff1a;段寄存器 &#xff08;mem&#xff09;memory&#xff1a;存储器&#xff08;内存单元&am…...

LabVIEW软件需求分析文档内容和编写指南

编写LabVIEW软件需求分析文档&#xff08;Software Requirements Specification, SRS&#xff09;是软件开发的关键步骤之一。以下是详细的内容结构、编写指南和注意事项&#xff1a; 内容结构 引言 项目背景&#xff1a;简要介绍项目背景和目的。 文档目的&#xff1a;说明需…...

spring cache(三)demo

目录 一、入门demo 1、pom 2、配置文件 3、config 4、controller 5、service 6、dao 7、dto与常量 8、测试&#xff1a; 8.1、无参 8.2、单参 &#xff08;1&#xff09;缓存与删除缓存 &#xff08;2&#xff09;删除缓存加入异常 二、自定义删除key 1、pom 2、…...

Android 应用开发语言选择对比

Android开发语言有多种&#xff0c;但是每种语言的各有不同的适用场景&#xff0c;对比介绍如下&#xff1a; 一.首选&#xff1a;原生应用Java&#xff0c;Kotlin 1.截至目前&#xff0c;大约有70%的Android开发者仍然使用Java语言进行开发&#xff0c;而30%的开发者则选择…...

Git 小白入门到进阶—(基本概念和常用命令)

一.了解 Git 基本概念和常用命令的作用 (理论) 基本概念 1、工作区 包含.git文件夹的目录&#xff0c;主要用存放开发的代码2、仓库 分为本地仓库和远程仓库&#xff0c;本地仓库是自己电脑上的git仓库(.git文件夹);远程仓库是在远程服务器上的git仓库git文件夹无需我们进行操…...

大数据框架总结(全)

☔️ 大数据框架总结&#xff08;全&#xff09; 关注“大数据领航员”&#xff0c;在公众号号中回复关键字【大数据面试资料】&#xff0c;即可可获取2024最新大数据面试资料的pdf文件 一. Hadoop HDFS读流程和写流程 HDFS写数据流程 &#xff08;1&#xff09;客户端通过…...

44、Flink 的 Interval Join 详解

Interval Join Interval join 组合元素的条件为&#xff1a;两个流&#xff08;暂时称为 A 和 B&#xff09;中 key 相同且 B 中元素的 timestamp 处于 A 中元素 timestamp 的一定范围内&#xff0c;即 b.timestamp ∈ [a.timestamp lowerBound; a.timestamp upperBound] 或…...

H6246 60V降压3.3V稳压芯片 60V降压5V稳压芯片IC 60V降压12V稳压芯片

H6246降压稳压芯片是一款电源管理芯片&#xff0c;为高压输入、低压输出的应用设计。以下是对该产品的详细分析&#xff1a; 一、产品优势 宽电压输入范围&#xff1a;H6246支持8V至48V的宽电压输入范围&#xff0c;使其能够适应多种不同的电源环境&#xff0c;增强了产品的通用…...

【MySQL精通之路】查询优化器的使用(8)

MySQL通过影响查询计划评估方式的系统变量、可切换优化、优化器和索引提示以及优化器成本模型提供优化器控制。 服务器在column_statistics数据字典表中维护有关列值的直方图统计信息&#xff08;请参阅第10.9.6节“Optimizer统计信息”&#xff09;。与其他数据字典表一样&am…...

Docker in Docker(DinD)原理与实践

随着云计算和容器化技术的快速发展&#xff0c;Docker作为开源的应用容器引擎&#xff0c;已经成为企业部署和管理应用程序的首选工具。然而&#xff0c;在某些场景下&#xff0c;我们可能需要在Docker容器内部再运行一个Docker环境&#xff0c;即Docker in Docker&#xff08;…...

科技前沿:IDEA插件Translation v3.6 带来革命性更新,翻译和发音更智能!

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …...

【并发小知识】

计算机五大组成部分 控制器 运算器 存储器 输入设备 输出设备 计算机的核心真正干活的是CPU&#xff08;控制器运算器中央处理器&#xff09; 程序要想计算机运行&#xff0c;它的代码必须要先由硬盘读到内存&#xff0c;之后cpu取指再执行 操作系统发展史 穿孔卡片处理…...

python将多个音频文件与一张图片合成视频

代码中m4a可以换成mp3,图片和音频放同一目录&#xff0c;图片名image.jpg&#xff0c;多线程max_workers可以根据CPU核心数量修改。 import os import subprocess import sys import concurrent.futures import ffmpeg def get_media_duration(media_path): probe ffmp…...

JavaEE:Servlet创建和使用及生命周期介绍

目录 ▐ Servlet概述 ▐ Servlet的创建和使用 ▐ Servlet中方法介绍 ▐ Servlet的生命周期 ▐ Servlet概述 • Servlet是Server Applet的简称&#xff0c;意思是 用Java编写的服务器端的程序&#xff0c;Servlet被部署在服务器中&#xff0c;而服务器负责管理并调用Servle…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...