每120,000行拆分文本文件?

时间:2014-02-17 18:47:44

标签: c# .net text

所以我有一个文本文件,我需要每120,000分割一次,当它在第120,000行分割时,我需要将其余部分分成另一个文本文件。关于这个人的任何想法?

3 个答案:

答案 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);