c# - CSV Helper:解析空单元格与空单元格
问题描述
我正在使用 CSVHelper 来解析 CSV 文件。
我在识别空单元格值或具有某个值(即一个或多个空格)的单元格时遇到了一些问题。
问题是当用户在其单元格中的文件中仅添加一个空格并上传文件时,CSV 帮助程序会修剪该单元格值,以便将该值作为“”传递。
现在,当用户没有向单元格添加任何内容(或类型)时,它也会像“”一样传递。
所以我想要的是: - 不应该允许上传空值。- 一个单元格中允许有一个或多个空格。
如何使用 CSVHelper 实现这一点。下面是我的示例代码:
using (TextReader fileReader = new StreamReader(file.OpenReadStream()))
{
var configuration = new Configuration
{
HasHeaderRecord = parameter.HasHeader,
Delimiter = parameter.Delimiter.ToString(),
Quote = parameter.Quote
};
using (var csv = new CsvReader(fileReader, configuration))
{
for (int rowIndex = 0; await csv.ReadAsync(); rowIndex++)
{
var record = csv.GetRecord<dynamic>() as IDictionary<string, object>;
string[] row = record?.Select(i => i.Value as string).ToArray();
for (int i = 0; i < row.Length; i++)
{
//process rows
}
}
}
}
下面是 csv 示例:
"1"," ","1"
"2","0"," "
"3","","1"
在上面的 csv 中,第一行的第二列有一个空格,应该允许第三行的第二列有 null,这是不允许的。
我的代码中缺少任何内容或任何解决方法来处理这个问题?
谢谢
解决方案
CSVHelper 15.0.3
使用以下代码,我在有空格的地方显示空格,在空的地方显示空格。
也许还有其他事情发生?
static void Main(string[] args)
{
ProcessRecords();
}
static async void ProcessRecords()
{
using (var reader = new StringReader("\"1\",\" \",\"1\"\n\"2\",\"0\",\" \"\n\"3\",\"\",\"1\""))
{
var configuration = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false,
Delimiter = ",",
Quote = '"'
};
using (var csv = new CsvReader(reader, configuration))
{
for (int rowIndex = 0; await csv.ReadAsync(); rowIndex++)
{
Console.WriteLine($"Row: {rowIndex}");
var record = csv.GetRecord<dynamic>() as IDictionary<string, object>;
string[] row = record?.Select(i => i.Value as string).ToArray();
for (int i = 0; i < row.Length; i++)
{
if (row[i] == " ")
{
Console.WriteLine("Has a space");
}
if (row[i] == "")
{
Console.WriteLine("Empty value");
}
}
}
Console.ReadKey();
}
}
}
推荐阅读
- android - 如何在 Flutter 中使用 RGB 颜色?
- docker - 没有域名的 Traefik
- angular - 如何从 Angular 4 调用 PHP 函数
- javascript - 例外:为 WebGL 构建时构建 WebGL 播放器失败
- javascript - 如何扩展字符串限制,同时使用 PHP 将其从 MYSQL 数据库转换为下拉列表中的 excel
- xamarin.forms - 应用激活时禁用 Tizen TV 上的“睡眠模式”
- angular - 选择 -- 请选择 -- 作为 angular 4.0 html 表单中下拉列表的默认值
- mysql - 从多个表中计算总数
- html - Angular 5 文件下载问题 - 显示 index.html 内容
- pointers - 在 C++/CLI 中的托管包装器之间共享本机指针