我有一个名为FileName的主文件,ID为人。它按排序顺序排列。 我想将ID分成27个块,并将每个块复制到不同的文本文件中。
using (FileStream fs = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
string line;
int numOfLines = File.ReadAllLines(FileName).Length; -- I have 73467
int eachSubSet = (numOfLines / 27);
var lines = File.ReadAllLines(dataFileName).Take(eachSubSet);
File.WriteAllLines(FileName1,lines);
}
我有27个不同的文本文件。所以我希望将73467个ID平均分配并复制到27个不同的文件。因此,第一个文件将ID#1发送到ID#2721 第二个Dile的ID为#2722到ID#(2722 + 2721),依此类推。我不知道如何自动执行此操作并快速运行。
由于 HR
答案 0 :(得分:2)
最简单的方法是在循环中运行File.ReadLine和WriteLine,并决定哪个文件将接收哪一行。
我不建议你并行化这个例程,因为它是一个IO操作,但只是行的副本会很快。
答案 1 :(得分:-1)
请注意,在示例代码中,您调用了File.ReadAllLines两次,因此您实际上会解析整个输入文件两次。 因此,避免这种情况会加快进程,并且您实际上没有拆分文件,您只能编写27中的第一个文件。 未经测试,但这些方面应该有效:
const int numOfFiles = 27;
string[] lines = File.ReadAllLines(FileName);
int numOfLines = lines.Length;
int eachSubSet = numOfLines/numOfFiles;
int firstSubset = numOfLines%numOfFiles + eachSubSet;
IEnumerable<string> linesLeftToWrite = lines;
for (int index = 0; index < numOfFiles; index++)
{
int numToTake = index == 0 ? firstSubset : eachSubSet;
File.WriteAllLines(string.Format("{0}_{1}.txt", FileName, index), linesLeftToWrite.Take(numToTake));
linesLeftToWrite = linesLeftToWrite.Skip(numToTake);
}