使用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);
}
}
我想将 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);
}
}