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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы