【发布时间】:2014-10-20 20:45:55
【问题描述】:
我在一个文件夹中生成多个 CSV,我必须将它们全部合并并制作一个文件。
附: 1.它们都有相同的标题。 2.他们的名字不是固定的,会根据日期和其他一些参数每隔一天更改一次。
【问题讨论】:
-
您将不得不编写代码。最简单的方法是google代码。您很有可能会获得所需的确切代码。
我在一个文件夹中生成多个 CSV,我必须将它们全部合并并制作一个文件。
附: 1.它们都有相同的标题。 2.他们的名字不是固定的,会根据日期和其他一些参数每隔一天更改一次。
【问题讨论】:
没有真正测试过,但应该给你一个想法:
var allCsv = Directory.EnumerateFiles("Src-Path", ".*csv", SearchOption.TopDirectoryOnly);
string[] header = { File.ReadLines(allCsv.First()).First(l => !string.IsNullOrWhiteSpace(l)) };
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));
请注意,您必须添加using System.Linq;
【讨论】:
IEnumerable<string> 的 WriteAllLInes 的重载,您必须使用 string[]。因此使用File.WriteAllLines("Dest-Path", header.Concat(mergedData).ToArray());
File.ReadLines 和 Directory.EnumerateFiles 在 .NET 4 中也是新的,所以你需要 File.ReadAllLines 和 Directory.GetFiles,它们在内存消耗方面效率较低。跨度>