// 版权所有 2009-2022 Josh Close
// 此文件是 CsvHelper 的一部分,在 MS-PL 和 Apache 2.0 下获得双重许可。
// 有关详细信息,请参阅 LICENSE.txt 或访问 http://www.opensource.org/licenses/ms-pl.html 对于 MS-PL 和 http://opensource.org/licenses/Apache-2.0 对于 Apache 2.0。
// https://github.com/JoshClose/CsvHelper
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Text;
using CsvHelper.Configuration;
using CsvHelper.Tests.Mocks;
using CsvHelper.TypeConversion;
using Xunit;namespace CsvHelper.Tests.DataTableTests
{public class CsvDataReaderTests{[Fact]public void GetValuesTest(){var s = new StringBuilder();s.AppendLine("Boolean,Byte,Bytes,Char,Chars,DateTime,Decimal,Double,Float,Guid,Short,Int,Long,Null");s.AppendLine("true,1,0x0102,a,ab,1/1/2019,1.23,4.56,7.89,eca0c8c6-9a2a-4e6c-8599-3561abda13f1,1,2,3,null");using (var reader = new StringReader(s.ToString()))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("null");var dataReader = new CsvDataReader(csv);dataReader.Read();Assert.True(dataReader.GetBoolean(0));Assert.Equal(1, dataReader.GetByte(1));byte[] byteBuffer = new byte[2];dataReader.GetBytes(2, 0, byteBuffer, 0, byteBuffer.Length);Assert.Equal(0x1, byteBuffer[0]);Assert.Equal(0x2, byteBuffer[1]);Assert.Equal('a', dataReader.GetChar(3));char[] charBuffer = new char[2];dataReader.GetChars(4, 0, charBuffer, 0, charBuffer.Length);Assert.Equal('a', charBuffer[0]);Assert.Equal('b', charBuffer[1]);Assert.Null(dataReader.GetData(0));Assert.Equal(DateTime.Parse("1/1/2019"), dataReader.GetDateTime(5));Assert.Equal(typeof(string).Name, dataReader.GetDataTypeName(0));Assert.Equal(1.23m, dataReader.GetDecimal(6));Assert.Equal(4.56d, dataReader.GetDouble(7));Assert.Equal(typeof(string), dataReader.GetFieldType(0));Assert.Equal(7.89f, dataReader.GetFloat(8));Assert.Equal(Guid.Parse("eca0c8c6-9a2a-4e6c-8599-3561abda13f1"), dataReader.GetGuid(9));Assert.Equal(1, dataReader.GetInt16(10));Assert.Equal(2, dataReader.GetInt32(11));Assert.Equal(3, dataReader.GetInt64(12));Assert.Equal("Boolean", dataReader.GetName(0)); Assert.Equal(0, dataReader.GetOrdinal("Boolean"));//返回字段的索引Assert.Equal("true", dataReader.GetString(0));Assert.Equal("true", dataReader.GetValue(0));var objectBuffer = new object[14];dataReader.GetValues(objectBuffer);Assert.Equal("true", objectBuffer[0]);Assert.Equal(DBNull.Value, objectBuffer[13]);Assert.True(dataReader.IsDBNull(13));}}[Fact]public void GetSchemaTableTest(){var s = new StringBuilder();s.AppendLine("Id,Name");s.AppendLine("1,one");s.AppendLine("2,two");using (var reader = new StringReader(s.ToString()))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){var dataReader = new CsvDataReader(csv);var schemaTable = dataReader.GetSchemaTable();Assert.Equal(25, schemaTable.Columns.Count);Assert.Equal(2, schemaTable.Rows.Count);}}[Fact]public void DataTableLoadTest(){var s = new StringBuilder();s.AppendLine("Id,Name");s.AppendLine("1,one");s.AppendLine("2,two");using (var reader = new StringReader(s.ToString()))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){var dataReader = new CsvDataReader(csv);var dataTable = new DataTable();dataTable.Columns.Add("Id", typeof(int));dataTable.Columns.Add("Name", typeof(string));dataTable.Load(dataReader);Assert.Equal(2, dataTable.Rows.Count);Assert.Equal(1, dataTable.Rows[0]["Id"]);Assert.Equal("one", dataTable.Rows[0]["Name"]);Assert.Equal(2, dataTable.Rows[1]["Id"]);Assert.Equal("two", dataTable.Rows[1]["Name"]);}}[Fact]public void DataTableLoadHeaderAndRowsHaveDifferentLengthTest(){var s = new StringBuilder();s.AppendLine("Id,Name");s.AppendLine("1,one,a");s.AppendLine("2,two,b");using (var reader = new StringReader(s.ToString()))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){var dataReader = new CsvDataReader(csv);var dataTable = new DataTable();dataTable.Columns.Add("Id", typeof(int));dataTable.Columns.Add("Name", typeof(string));dataTable.Load(dataReader);Assert.Equal(2, dataTable.Rows.Count);Assert.Equal(1, dataTable.Rows[0]["Id"]);Assert.Equal("one", dataTable.Rows[0]["Name"]);Assert.Equal(2, dataTable.Rows[1]["Id"]);Assert.Equal("two", dataTable.Rows[1]["Name"]);}}[Fact]public void DataTableLoadNoHeaderTest(){var config = new CsvConfiguration(CultureInfo.InvariantCulture){HasHeaderRecord = false,};var s = new StringBuilder();s.AppendLine("1,one");s.AppendLine("2,two");using (var reader = new StringReader(s.ToString()))using (var csv = new CsvReader(reader, config)){var dataReader = new CsvDataReader(csv);var dataTable = new DataTable();dataTable.Load(dataReader);Assert.Equal(0, dataTable.Rows.Count);}}[Fact]public void ReadWithNoHeaderTest(){var config = new CsvConfiguration(CultureInfo.InvariantCulture){HasHeaderRecord = false,};var s = new StringBuilder();s.AppendLine("1,one");s.AppendLine("2,two");using (var reader = new StringReader(s.ToString()))using (var csv = new CsvReader(reader, config)){var dataReader = new CsvDataReader(csv);dataReader.Read();Assert.Equal(1, dataReader.GetInt32(0));Assert.Equal("one", dataReader.GetString(1));dataReader.Read();Assert.Equal(2, dataReader.GetInt32(0));Assert.Equal("two", dataReader.GetString(1));}}[Fact]public void IsNullTest(){var config = new CsvConfiguration(CultureInfo.InvariantCulture){HasHeaderRecord = false,};var s = new StringBuilder();s.AppendLine(",null");using (var reader = new StringReader(s.ToString()))using (var csv = new CsvReader(reader, config)){csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("null");var dataReader = new CsvDataReader(csv);Assert.False(dataReader.IsDBNull(0));Assert.True(dataReader.IsDBNull(1));}}[Fact]public void DbNullTest(){var config = new CsvConfiguration(CultureInfo.InvariantCulture){HasHeaderRecord = false,};var s = new StringBuilder();s.AppendLine(",null");using (var reader = new StringReader(s.ToString()))using (var csv = new CsvReader(reader, config)){csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("null");var dataReader = new CsvDataReader(csv);Assert.Equal(string.Empty, dataReader.GetValue(0));Assert.Equal(DBNull.Value, dataReader.GetValue(1));var values = new object[2];dataReader.GetValues(values);Assert.Equal(string.Empty, values[0]);Assert.Equal(DBNull.Value, values[1]);}}[Fact]public void GetOrdinalCaseInsensitiveTest(){var parser = new ParserMock{{ "Id", "Name" },{ "1", "one" },null,};using (var csv = new CsvReader(parser)){using (var dr = new CsvDataReader(csv)){var ordinal = dr.GetOrdinal("name");Assert.Equal(1, ordinal);}}}[Fact]public void GetOrdinalMissingTest(){var parser = new ParserMock{{ "Id", "Name" },{ "1", "one" },null,};using (var csv = new CsvReader(parser)){using (var dr = new CsvDataReader(csv)){Assert.Throws<IndexOutOfRangeException>(() =>{dr.GetOrdinal("Foo");});}}}[Fact]public void DataTableLoadEmptyTest(){var config = new CsvConfiguration(CultureInfo.InvariantCulture){HasHeaderRecord = false,};using (var reader = new StringReader(string.Empty))using (var csv = new CsvReader(reader, config)){var dataReader = new CsvDataReader(csv);Assert.Equal(0, dataReader.FieldCount);}}[Fact]public void DataTableNullableValueTypeTest(){var config = new CsvConfiguration(CultureInfo.InvariantCulture){};var parser = new ParserMock(config){{ "Id", "Name", "DateTime" },{ "1", "one", DateTime.Now.ToString() },};using (var csv = new CsvReader(parser))using (var dr = new CsvDataReader(csv)){csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("");var table = new DataTable();table.Columns.Add("Id", typeof(int));table.Columns.Add("Name", typeof(string));var column = table.Columns.Add("DateTime", typeof(DateTime));column.AllowDBNull = true;table.Load(dr);}}}
}

【C#】CsvHelper 读写CSV文件相关推荐

  1. python pandas 读写 csv 文件

    python pandas 读写 csv 文件 具体看官方文档 https://www.pypandas.cn/docs/user_guide/io.html#csv-文本文件 import pand ...

  2. 使用 Apache Commons CSV 读写 CSV 文件

    有时候,我们需要读写 CSV 文件,在这里给大家分享Apache Commons CSV,读写 CSV 文件非常方便. 具体官方文档请访问Apache Commons CSV. 官方文档已经写得很详细 ...

  3. python读取csv文件的方法-python读写csv文件的方法

    1.爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup books = [] def b ...

  4. python读csv-python读写csv文件

    1用python做数据分析,数据来源一般会有多种格式,而我喜欢以CSV的方式进行存储分析,如果数据本身就是CSV格式的那我可以直接用pandas库自带的方法进行读取即可,但是有时候各种来源的数据不方便 ...

  5. python本地读csv文件_python读写csv文件方法详细总结

    python提供了大量的库,可以非常方便的进行各种操作,现在把python中实现读写csv文件的方法使用程序的方式呈现出来. 在编写python程序的时候需要csv模块或者pandas模块,其中csv ...

  6. 利用JavaCSV API来读写csv文件

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53423121 1 背景 CSV文件的读写其实是有很多方法 ...

  7. python导入文件列行_python读写csv文件并增加行列的实例代码

    python读写csv文件并增加行列,具体代码如下所示: # -*- coding: utf-8 -*- """ Created on Thu Aug 17 11:28: ...

  8. java opencsv_用opencsv文件读写CSV文件

    首先明白csv文件长啥样儿: 用excel打开就变成表格了,看不到细节 推荐用其它简单粗暴一点儿的编辑器,比如Notepad++, csv文件内容如下: csv文件默认用逗号分隔各列. 有了基础的了解 ...

  9. python操作csv文件第7行开始的数据_Python教程-Python读写CSV文件

    前言 本教程学习在Python中使用CSV文件.CSV(逗号分隔值)格式是在电子表格和数据库中使用的非常流行的导入和导出格式.Python语言包含该模块,该模块具有用于读取和写入CSV格式的数据的类. ...

最新文章

  1. 【Python】我的第一个EXE程序
  2. css开头的文本格式,css文件开头怎么写
  3. 羊年快乐!献上小礼一份!
  4. 织梦的网站地图怎么做html,织梦自带网站地图的生成制作方法详解
  5. 微信扫码点餐帮助商家赚钱的方法
  6. java正态分布的概率密度函数_正态分布概率密度函数
  7. 上传压缩包文件到Minio服务器遇到 java.io.EOFException: Truncated ZIP entry 异常
  8. excel 行列互换 绿色工具(怎么把行变成列,把列变成行)
  9. 兜兜转转~~,忘不了的break!! 忘不了的continue!!!!
  10. Android TV Input Framework(TIF)--构建TV input list
  11. Python正则表达式及match函数的用法
  12. 使用photoView完成照片查看器(本地图片)
  13. 简单粗暴理解与实现机器学习之K-近邻算法(三):距离度量、欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化距离、余弦距离、汉明距离、杰卡德距离、马氏距离
  14. python爬虫笔记——Scrapy框架(浅学)
  15. tpc-c 服务器性能,TPC-E和TPC-C测试结果比较之我见
  16. LCR测试仪与阻抗分析仪有何不同?测试软件怎么选?
  17. android studio改字体,在Android Studio中更改字体样式的不同方法有哪些
  18. 【读书笔记】《刻意练习》 [美] 安德斯·艾利克森(Anders Ericsson)
  19. 网站变灰,寄托哀思,让我们共同行动!( 图片、文字、Flash变灰)
  20. 如何在浏览器中运行Linux程序,如何在Chromebook的浏览器标签中运行完整的Linux桌面 | MOS86...

热门文章

  1. 几款实用的内网穿透工具
  2. AI面部修复项目:GFP-GAN
  3. 可以下载查看国家自然科学基金的申请文本
  4. 软件开发的那些坑,你跳了没?这篇文章价值千万(一)
  5. ubuntu20.04开机黑屏解决方法
  6. 最好用的coreldraw2020中文版,安装好后不显示评估版,显示已注册
  7. 研华PCI板卡开发(5)快速入门(5)群组操作
  8. linux无线usb网卡,Linux下USB无线网卡WL-167G驱动安装过程
  9. Shiro 权限管理
  10. 运维监控都监控些什么