【问题标题】:HI, I have 3 CSV file and want to combine them嗨,我有 3 个 CSV 文件并想将它们合并
【发布时间】:2016-04-29 10:03:01
【问题描述】:

N 个 CSV 文件合并为一个文件。并且数据必须并排放置,像这样

DatTime_M1  Voltage Currency| Dattime_m2 Volage currency |.....DatTime_N Vol  Curr
2016-04-29  237.1   3.54    2016-04-29  237.1   3.54   2016-04-29   237.1   3.54
2016-04-29  237.7   3.54   2016-04-29   237.1   3.54   2016-04-29   237.1   3.54
2016-04-29  236.4   3.54    2016-04-29  237.1   3.54   2016-04-29   237.1   3.54
2016-04-29  236.4   3.53    2016-04-29  237.1   3.54   2016-04-29   237.1   3.54

我已经编写了一个代码,而不是上面的合并,而是简单地合并或附加在同一行中。

string[] files = (Directory.GetFiles(txtConsolidated_OS_CSV.Text.Trim()));
                    foreach (var file in files)
                    {
                        StringBuilder sb = new StringBuilder();
                        string filename = Path.GetFileNameWithoutExtension(file);
                        if (file.EndsWith(".csv"))
                        {
                            string[] rows = File.ReadAllLines(file);
                            for (int i = 0; i < rows.Length; i++)
                            {
                                if (i == 0)
                                {
                                    if (counter == 0)
                                    {
                                        sb.Append(rows[i] + "\n");
                                        counter++;
                                    }
                                }
                                else
                                {
                                    sb.Append(rows[i] + "\n");
                                }
                            }
                        }
                        string csvfile = txtConsolidated_OS_CSV.Text + "\\Merged_OS.csv";

                        if (File.Exists(csvfile))
                        {
                            File.AppendAllText(csvfile, sb.ToString());
                            sb.Clear();
                        }
                        else
                        {
                            File.WriteAllText(csvfile, sb.ToString());
                            sb.Clear();
                        }

【问题讨论】:

  • 好吧,作为人类你会怎么做呢?看着您的屏幕,不清楚您的 3 个文件应该如何以组合文件的形式到达,您是否需要内容 1,然后是内容 2,然后是 3.. 一个接一个,或者,您是否尝试从每个文件中获取字段文件并制作一个将所有 3 位信息捆绑在一起的宽文件>

标签: c# winforms csv c#-4.0


【解决方案1】:

使用 LINQ:

var allCsv = Directory.EnumerateFiles("Src-Path", ".*csv", SearchOption.TopDirectoryOnly);
string[] header = 
{ 
    File.ReadLines(allCsv.First()).First(l => !string.IsNullOrWhiteSpace(l)) 
};

 // Get CSV Data
 var mergedData = allCsv.SelectMany(csv => File.ReadLines(csv).SkipWhile(l => string.IsNullOrWhiteSpace(l)).Skip(1)); 

 // skip header of each file
 File.WriteAllLines("Dest-Path", header.Concat(mergedData));

来自here

【讨论】:

  • 应该是*.csv,而不是.*csv。编辑队列已满,所以我无法编辑您的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2020-12-21
相关资源
最近更新 更多