Преобразовать в тексте дату и деньги - 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();
}
}
}
}