首页 > 解决方案 > 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(),因为字段可能包含"、分隔符;或换行符。

标签: c#stringcsvcsvhelper

解决方案


如果您想用引号将项目包装起来(带擒纵:"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"

推荐阅读