Замена фразы по маске на другую фразу по маске в файле - C#
Формулировка задачи:
Добрый день!
Имеется задача, которую, к сожалению, пока не могу реализовать:
Есть текстовый файл состоящий из множества строк. В нем нужно заменить первое вхождение фразы, удовлетворяющей маске "; день недели(3 символа) число (2 символа) месяц (3 символа) год (4 символа) время (hh:mm:ss) часовой пояс (всегда +0300)" (например,"; Fri, 30 Jun 2017 09:06:53 +0300"), на второе вхождение фразы, удовлетворяющей маске. Остальные фразы не трогать. Фраза всегда начинается с символа ";" и заканчивается на "+0300". Если бы вся фраза всегда располагалась на одной строке, проблем у меня это бы не вызвало. Но фраза может начаться на одной строке, а закончиться на другой.
Пример прилагаю.
Решение задачи: «Замена фразы по маске на другую фразу по маске в файле»
textual
Листинг программы
- static void Main(string[] args)
- {
- string[] dirs = Directory.GetFiles(@"D:\mail\", "*.eml");
- try
- {
- foreach (string dir in dirs)
- {
- Console.WriteLine(dir);
- string file = String.Empty;
- using (StreamReader read = new StreamReader(dir, Encoding.Default))
- {
- file = read.ReadToEnd();
- }
- Regex regex = new Regex(@";\s*[a-z]{3},\s*\d\d\s*[a-z]{3}\s*\d{4}\s*\d\d:\d\d:\d\d\s*\+0300", RegexOptions.IgnoreCase);
- Match m = regex.Match(file);
- string dateOld = String.Empty;
- string dateNew = String.Empty;
- if (m.Success)
- {
- dateOld = m.ToString();
- dateNew = m.NextMatch().ToString();
- }
- using(StreamWriter writer =new StreamWriter(dir.Insert(dir.LastIndexOf('\\') + 1, "end\\"),false,Encoding.Default))
- {
- writer.WriteLine(file.Replace(dateOld, dateNew));
- }
- }
- }
- catch (Exception e)
- {
- Console.WriteLine("Произошла ошибка: {0}", e.ToString());
- Console.ReadLine();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д