2013-03-26 2 views
0

У меня большой текстовый файл может составлять до + 500 МБ), что мне нужно заменить все события даты, которые встречаются в определенной строке. Я использую регулярное выражение для соответствия дате, и это отлично работает. Мне нужно зафиксировать номер строки, совпадение и всю строку, в которой происходит совпадение. У меня есть эта часть, работая, это часть замены, с которой я борюсь. В идеале я хотел бы сделать матч, захватить дополнительную информацию и сделать замену в одной поездке через файл. Как я могу сделать это эффективно? Это то, что я использую для выполнения регулярного выражения.C# Regex Match/Replace Large Text File

while ((line = InputFile.ReadLine()) != null) 
{ 
    // Increment for each line read 
    x++; 

    // Try to match each line against the Regex. 
    Match m = reg.Match(line);      
    if (m.Success) 
    { 
     DateTime result; 
     if (!(DateTime.TryParse(m.Groups[0].Value, out result))) 
     { 
      // add it to the DT 
      MatchTable.Rows.Add(x, m.Groups[0].Value, line); 
     } 
     else if (DateTime.Parse(m.Groups[0].Value).Year <= 1753) // 1753 is the earliest date that can be stored in SQL datetime 
     { 
      // add it to the DT      
      MatchTable.Rows.Add(x, m.Groups[0].Value, line); 
     } 
    } 
} 
+0

Может ли это быть выполнено с асинхронным чтением/записью? (Не то, чтобы я знал, как это сделать, просто интересно) – mack

ответ

1

Я думаю, что я бы, наверное, построить вторую линию временного файла с помощью модифицированной линии, а затем удалить старый файл и переименовать новый по завершении.