【发布时间】:2020-01-03 09:10:44
【问题描述】:
我正在尝试合并两个具有不同标题和不同行数/行数的 csv 文件。 使用以下代码,但没有得到正确的输出。它在行相同时起作用。
var first = File.ReadAllLines("firstfile.csv");
var second = File.ReadAllLines("secondfile.csv");
var result = first.Zip(second, (f, s) => string.Join(",", f, s));
File.WriteAllLines("combined.csv", result);
例如: 第一个文件是
col1,colb,colc
a,b,c
a,v,f
第二个文件是
colx,coly
x,y
cc,aa
bb,vv
m,n
输出是get
col1,colb,colc,colx,coly
a,b,c,x,y
a,v,f,cc,aa
第二个文件行丢失。 我的预期输出是
col1,colb,colc,colx,coly
a,b,c,x,y
a,v,f,cc,aa
,,,bb,vv
,,,m,n
【问题讨论】:
-
如果你有不同的标题,那么“正确”的输出是什么?
-
如何计算出 file1 的哪一行与 file2 的哪一行
-
如果我正确假设您的最终目标是什么,您必须为“较短”文件中缺少的行提供数据,为此您需要计算其中的列数。将您的代码重写为普通的旧
for循环,您可能会知道下一步该做什么(或者至少知道一个更具体的问题的想法)。 -
您能否添加一个额外的步骤来检查每个文件中的行,对于行数较少的文件,附加空白条目。这样,当您合并时,它们将正确结婚。我会说当前合并正在命中“空”行并且正在停止,或者这会将最终文件中的整个合并行归零。
-
Enumerable.Zip合并序列,直到它到达其中一个的末尾并忽略额外的行。您可以阅读更多内容documentation