如何从List<String[]>创建一个csv文件

27

有谁能帮助我从列表创建一个csv文件,我的情况是,我有一个多维的值,如下所示在一个列表中

List<string[]> lst = new List<string[]>();
lst= csv1.ToList();

lst 包含以下数值:

lst[0] = {string[53]}
lst[1] = {string[53]}
lst[2] = {string[53]}
lst[3] = {string[53]}
lst[4] = {string[53]}

并且 string[53] 包含类似以下的值

lst[0]
    string[0] = "abc"
    string[1] = "def"
    string[2] = "ghi"
    string[3] = "jkl"
    string[4] = "mno"
    ...
lst[1]
    string[0] = "123"
    string[1] = "456"
    string[2] = "789"
    string[3] = "10"
    string[4] = "11"
    ...

我只是想将这个多维列表写入CSV文件,使lst[]中的每个项都成为CSV中的一行,而string[]中的每个项都成为CSV中的一列,使得最终输出结果如下:

abc,def,ghi,jkl,mno
123,456,789,10,11

任何帮助都将不胜感激。


我尝试过这样写:String csv = String.Join(",", lst.Select(x => x.ToString()).ToArray()); 但是我没有得到输出。 - Gnanasekaran Kuppusamy
2个回答

36

在最简单的情况下,不处理引用/转义/多行CSV问题,那么只需循环; 可能会像这样:

    using (var file = File.CreateText(path))
    {
        foreach(var arr in lst)
        {
           file.WriteLine(string.Join(",", arr));
        }
    }

或者更加高效一点(不需要中间字符串):

    using (var file = File.CreateText(path))
    {
        foreach (var arr in lst)
        {
            if (String.IsNullOrEmpty(arr)) continue;
            file.Write(arr[0]);
            for(int i = 1 ; i < arr.Length ; i++)
            {
                file.Write(',');
                file.Write(arr[i]);
            }
            file.WriteLine();
        }
    }

你的第二个示例会在每条记录的末尾添加额外的逗号。 - Matthew Whited

34

使用 LinQ:

File.WriteAllLines("text.txt", lst.Select(x => string.Join(",", x)));

我正在尝试使用“|”分隔符实现此操作,但它仍然生成逗号分隔的文件,有任何想法原因是什么? - jeffkenn
1
在string.Join()中,将“,”更改为“|”,@jeffkenn。 - TheEmirOfGroofunkistan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接