C# 并排合并两个或多个文本文件 [英] C# Merging Two or more Text Files side by side
本文介绍了C# 并排合并两个或多个文本文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
using (StreamWriter writer = File.CreateText(FinishedFile))
{
int lineNum = 0;
while (lineNum < FilesLineCount.Min())
{
for (int i = 0; i <= FilesToMerge.Count() - 1; i++)
{
if (i != FilesToMerge.Count() - 1)
{
var CurrentFile = File.ReadLines(FilesToMerge[i]).Skip(lineNum).Take(1);
string CurrentLine = string.Join("", CurrentFile);
writer.Write(CurrentLine + ",");
}
else
{
var CurrentFile = File.ReadLines(FilesToMerge[i]).Skip(lineNum).Take(1);
string CurrentLine = string.Join("", CurrentFile);
writer.Write(CurrentLine + "\n");
}
}
lineNum++;
}
}
我目前这样做的方式太慢了.我正在合并每行超过 50k 行的文件,其中包含不同数量的数据.
The current way i am doing this is just too slow. I am merging files that are each 50k+ lines long with various amounts of data.
例如:档案1
1
2
3
4
for ex:
File 1
1
2
3
4
文件 2
4
3
2
1
File 2
4
3
2
1
我需要这个合并成第三个文件
文件3
1,4
2,3
3,2
4,1
P.S.用户可以从任何位置选择任意数量的文件.
感谢您的帮助.
i need this to merge into being a third file
File 3
1,4
2,3
3,2
4,1
P.S. The user can pick as many files as they want from any locations.
Thanks for the help.
推荐答案
你的方法很慢,因为 Skip
和 Take
在循环中.
You approach is slow because of the Skip
and Take
in the loops.
您可以使用字典来收集所有行索引的行:
You could use a dictionary to collect all line-index' lines:
string[] allFileLocationsToMerge = { "filepath1", "filepath2", "..." };
var mergedLists = new Dictionary<int, List<string>>();
foreach (string file in allFileLocationsToMerge)
{
string[] allLines = File.ReadAllLines(file);
for (int lineIndex = 0; lineIndex < allLines.Length; lineIndex++)
{
bool indexKnown = mergedLists.TryGetValue(lineIndex, out List<string> allLinesAtIndex);
if (!indexKnown)
allLinesAtIndex = new List<string>();
allLinesAtIndex.Add(allLines[lineIndex]);
mergedLists[lineIndex] = allLinesAtIndex;
}
}
IEnumerable<string> mergeLines = mergedLists.Values.Select(list => string.Join(",", list));
File.WriteAllLines("targetPath", mergeLines);
这篇关于C# 并排合并两个或多个文本文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文