使用C#将数据拆分为csv中的两列

split data into two column in a csv using C#

我想将 table 数据拆分为 CSV 格式的两列。我有一个 table 一列(例如 pincode)有 100 条记录。 使用 c# 我创建了 csv 文件,但我想将此记录拆分为两列(例如,pincode1、pincode2)。

谁能建议我们如何才能做到这一点?

提前致谢

这是代码

var pincodes= DataSourceAccess.RetrieveLockedTns(Convert.ToInt32(count));
if (pincodes?.Count() > 0)
{
     var csv = new StringBuilder();
     pincodes.ForEach(x => csv.AppendLine(x));
     File.WriteAllText(path, csv.ToString());
}

考虑一下我从数据库中获取的 10 条记录 它生成的数据是一个带有 pincodes

的 csv 文件
 12345  
 23455  
 34543  
 22345
 24554  
 23857 
 57485  
 94859  
 93846  
 47395

结果我想要一列中的前 5 条记录 (pincode1) 和其他列中的其他 5 条记录 (pincode2)

pincode1 pincode2
12345     23857
23455     57485
34543     94859
22345     93846
24554     47395

我认为一个简单的 for 循环将最好地解决这个问题,而不是 foreach

int half = pincodes.Count/2;
for(int x = 0; x < half; x++)
    csv.Append(pin[x]).Append('\t').AppendLine(pin[x+half]);

您可以使用 linq 创建两个列表,每一半一个,然后将它们压缩到一个 IEnumerable 中,作为每个元素的逗号分隔字符串。请注意,我必须通过将零附加到较短的列表来确保两个列表的长度相同,以便 zip 函数获取两个列表中的所有元素。然后将该字符串写入 csv 文件。字符串中的逗号表示像 112,78 这样的元素会自动分成两列,逗号前的数字在第一列,逗号后的数字在第二列。下面的代码已经过测试并且可以正常工作。我还附上了创建的 csv 文件的图像。

using System.IO;
using System.Text;
using System.Linq;
using System.Collections.Generic;

            int[] pincodes = new int[] {1123, 677,098,666 };
            List<int> pincodes1 = new List<int>();
            List<int> pincodes2 = new List<int>();
            pincodes1 = pincodes.Take(pincodes.Length / 2).ToList();
            pincodes2 = pincodes.Skip(pincodes.Length / 2).ToList();
            if (pincodes1.Count > pincodes2.Count)
                pincodes2.Add(0);
            else if (pincodes2.Count > pincodes1.Count)
                pincodes1.Add(0);

            var bothpincodes = pincodes1.Zip(pincodes2, (first, second) => 
              first + "," + second);

            using (StreamWriter sw = File.CreateText("mypinscombined.csv"))
            {
                foreach (var item in bothpincodes)
                {
                    sw.WriteLine(item);
                }
            }