【问题标题】:split data into two column in a csv using C#使用 C# 将数据拆分为 csv 中的两列
【发布时间】:2021-12-21 01:23:57
【问题描述】:

我想将表格数据拆分为 CSV 中的两列。我有一个表,其中一列(例如 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 条记录 它生成的数据是带有密码的 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

【问题讨论】:

  • 显示您编写的代码、它现在生成的数据以及您希望它生成的示例
  • var pincodes = DataSourceAccess.Retrievepincode(Convert.ToInt32(count)); if (pincodes ?.Count() > 0) { var csv = new StringBuilder();密码 .ForEach(x => csv.AppendLine(x)); File.WriteAllText(路径, csv.ToString()); }
  • 我要了 3 件事;这似乎是其中之一。请将其(和其他两件事)编辑到问题中,而不是发表评论;代码在 cmets 中格式不正确
  • 添加了所有 3 个部分

标签: c# csv datatable


【解决方案1】:

您可以使用 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);
                }
            }

【讨论】:

  • 我不需要多个 csv。我需要一个可以获取数据的 CSV。
  • 我已经编辑了我的答案。立即检查。
【解决方案2】:

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

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

【讨论】:

  • 此代码将两条记录放在一列中,而不是像这样 12345 23857 将两条记录放在两列中
  • 您要制表符分隔,还是逗号分隔?你写你的问题就像你想要标签一样,因为预期的输出中没有任何逗号;它有,例如12345 23857 - 没有逗号,但是有一个很大的空格,就像一个制表符。这就是我在示例代码中使用标签\t 的原因。如果需要逗号,请将\t 更改为,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
相关资源
最近更新 更多