c# - csvHelper string[][] to string[]
问题描述
我在 csv 中有一些数据,例如
string[][] items = new string[][] {
new string[] { "dog", "3" },
new string[] { "cat", "2" },
new string[] { "bird", "1" }
};
现在我想将输入转换为格式正确的 CSV 行并返回它们 - 预期输出:
string[] csvLines = {"\"dog\";\"3\"", "\"cat\";\"2\"", "\"bird\";\"1\""};
或文件:
"dog";"3"
"cat";"2"
"bird";"1"
我试过的:
public static IEnumerable<string> GetCSVLines(string[][] list)
{
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
using (CsvHelper.CsvWriter csv = new CsvHelper.CsvWriter(writer))
{
foreach (var item in list)
{
foreach (var field in item)
{
csv.WriteField(field);
}
yield return csv.Record; //??
csv.NextRecord();
}
}
}
注意:我不能只使用string.Join()
,因为字段可能包含"
、分隔符;
或换行符。
解决方案
如果您想用引号将项目包装起来(带擒纵:"ab\"c"
应该是"\"ab\"\"c\""
)并且Join
它们与;
您一起不需要,CsvHelper
只需要一个简单的Linq
string[][] items = new string[][] {
new string[] { "dog", "3" },
new string[] { "cat", "2" },
new string[] { "bird", "1" },
new string[] { "e\"sc", "4" } // escapment demo
};
string[] result = items
.Select(line => string.Join(";",
line.Select(item => "\"" + item.Replace("\"", "\"\"") + "\"")))
.ToArray();
Console.Write(string.Join(Environment.NewLine, result));
结果:
"dog";"3"
"cat";"2"
"bird";"1"
"e""sc";"4"
推荐阅读
- list - 在图形的cpp实现中,节点应该存储在模板向量还是列表中?
- android - 默认启动器已设置,但不适用于其他用户
- c# - C# 空 WebClient 下载字符串
- nativescript - Nativescript 图像区域协调点击事件,如 HTML Image Map
- php - 如何使用 USB 令牌使用 PHP 和 chrome 令牌签名扩展在 pdf 中应用数字签名?
- javascript - Calling Javascript function from external file when loading html page
- c# - 使用 datatable() 计算 C# 表单文本框字符串
- csv - PySpark:如何用逗号指定列作为十进制
- android - Android - 模拟问题
- javascript - 我想知道这个函数到底做了什么 .split(' ').map(x => +x);