Преобразовать в тексте дату и деньги - C#
Формулировка задачи:
Есть необходимость в тексте преобразовать дату и деньги в нормальный вид. Т.е. дату в виде хх.или/или-хх.или/или-хххх (дд мм гггг) в американский формат Month day, year. Валюта в виде разрядов и usd за ними. Между разрядами может быть любое количество пробелов. Все пробелы нужно убрать. Подстроку надо найти регулярным выражением и заменить с помощью MatchEvaluator. Надо сделать абстрактный класс с универсальным методом реализации поиска и замены в переданной строки по регулярке. А уникальные детали обработки для даты и валюты реализовать в подклассе.
Регулярку для даты есть
помогите с остальным. Как вообще происходит поиск и замена с использованием регулярки?
@"\b((0[1-9])|([1-2][0-9])|(3[0-1]))\[/-.]((0[1-9])|(1[0-2]))\[/-.]\d{4}\b"
Можно через MatchEvaluator передавать строку в класс?
Такой синтаксис прокатит?
MatchEvaluator myEvaluator = new MatchEvaluator(new ChangerClass(input string));
Сделал часть программы, чтобы для начала перевести время в нужный формат. Но в итоге текстовый файл пустой. Помогите разобраться
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; using System.IO; namespace Task2 { class Program { static void Main(string[] args) { string[] filesLines = File.ReadAllLines(@"e:\in.txt"); StreamWriter outFile = File.CreateText(@"e:\out.txt"); DateChanger dc; //MoneyChanger mc; foreach (var lines in filesLines) { dc = new DateChanger(lines, @"\b((0[1-9])|([1-2][0-9])|(3[0-1]))\[/-.]((0[1-9])|(1[0-2]))\[/-.]\d{4}\b"); outFile.WriteLine(dc.ReplacePrep()); //mc = new MoneyChanger(lines); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; namespace Task2 { abstract class AbstractChanger { private string sRegex; private string inputLine; public string InputLine { get { return inputLine; } private set { inputLine = value; } } public string SRegex { get { return sRegex; } private set { sRegex = value; } } public AbstractChanger() { } public AbstractChanger(string line, string sRegex) { InputLine = line; SRegex = sRegex; } public virtual string ReplacePrep() { Regex r = new Regex(SRegex); MatchEvaluator myEvaluator = new MatchEvaluator(ReplaceLine); return inputLine = r.Replace(InputLine, myEvaluator); } public abstract string ReplaceLine(Match m); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; using System.Globalization; namespace Task2 { class DateChanger : AbstractChanger { private string sRegex = @"\b((0[1-9])|([1-2][0-9])|(3[0-1]))\[/-.]((0[1-9])|(1[0-2]))\[/-.]\d{4}\b"; public DateChanger() : base() { } public DateChanger(string line, string sRegex) : base (line, sRegex) { } public override string ReplacePrep() { return base.ReplacePrep(); } public override string ReplaceLine(Match m) { DateTime dateValue; DateTime.TryParse(InputLine, out dateValue); return dateValue.ToString("d", CultureInfo.CreateSpecificCulture("en-US")); } } }
в файле in.txt ввёл:
After playing 12.09.2014 I won championship
Не передаётся дата в ReplaceLine(). Помогите разобраться, что не так
Решение задачи: «Преобразовать в тексте дату и деньги»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; namespace Task2 { class MoneyChanger : AbstractChanger { public MoneyChanger() : base() { } public MoneyChanger(string[] line, string sRegexr, string output) : base (line, sRegexr, output) { } public override string ReplaceLine(Match m) { string modifLine = "";modifLine += m.Value; modifLine = Regex.Replace(modifLine, @"\s+", " "); if (modifLine.IndexOf(" ") > 2) return modifLine.ToString(); else { StringBuilder temp = new StringBuilder(""); int index = modifLine.IndexOf('b'); temp.Append(modifLine.Substring(0, index)); temp.Replace(" ", ""); temp.Append(modifLine.Substring(modifLine.IndexOf("b") - 1)); return temp.ToString(); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д