所以我有一个文本文件,我需要每120,000分割一次,当它在第120,000行分割时,我需要将其余部分分成另一个文本文件。关于这个人的任何想法?
答案 0 :(得分:6)
您可以使用Batch from MoreLINQ将您的行分组为120,000行,然后分别处理这些行。
foreach(var batch in File.ReadLines(inputFile).Batch(120000))
WriteToFile(batch);
答案 1 :(得分:3)
var lines = new List<string>();
int counter = 0,i = 1;
string line;
using (var reader = new StreamReader("filePath"))
{
while ((line = reader.ReadLine()) != null)
{
lines.Add(line);
counter++;
if (counter == 120000)
{
string fileName = String.Format("file{0}.txt",i);
File.WriteAllLines(fileName,lines);
lines.Clear();
counter = 0;
i++;
}
}
}
if(lines.Count > 0) File.WriteAllLines("path", lines);
注意:使用File.WriteAllLines
时应使用不同的文件名,否则只会覆盖单个文件的内容。例如,您可以使用另一个计数器并为每个文件递增{{1} }。
答案 2 :(得分:2)
使用Enumerable.GroupBy
和“整数除法组”的另一种方式:
int batchSize = 120000;
var fileGroups = File.ReadLines(path)
.Select((line, index) => new { line, index })
.GroupBy(x => x.index / batchSize)
.Select((group, index) => new {
Path = Path.Combine(dir, string.Format("FileName_{0}.txt", index + 1)),
Lines = group.Select(x => x.line)
});
foreach (var file in fileGroups)
File.WriteAllLines(file.Path, file.Lines);