Шаблон разработки: Парсинг подобные, но отличающиеся схемы в текстовых файлах

У вас есть несколько двойных кавычек из синхронизации - попробуйте следующее:

=DCount("CustomerServiceRep", "tbl_WCCSRQA", "CustomerServiceRep = '" & [Forms]![frm_CSRErrorTracking]![CSRNameCB] & "' AND ClaimDate BETWEEN #" & Format([FORMS]![frm_CSRErrorTracking]![StartDate],"yyyy-mm-dd") & "# AND #" & Format([FORMS]![frm_CSRErrorTracking]![EndDate],"yyyy-mm-dd") & "#")
8
задан JWD 2 December 2008 в 15:46
поделиться

5 ответов

Это походит на кандидата на Стратегическую модель. Пример в C# может быть найден здесь и другой здесь. Краткое описание доступно на Википедию.

Больше полных описаний доступно в книге Fowler и Kerievsky.

Это также доступно из книги GoF.

6
ответ дан 5 December 2019 в 15:27
поделиться

Шаблон "Поставщика" является тем, который Вы ищете..., это - то, что используется в ADO.NET. У каждого поставщика базы данных есть отдельные данные "Поставщик", который "знает", как считать данные с, он - определенный продукт поставщиков DB, но поставляет его в стандартном формате (интерфейс) к нисходящим системам... Вы запишете маленький компонент "Поставщика" (единый класс будет достаточен), который "знает" формат для каждого из Ваших различных поставщиков ретроспективных данных покера веб-сайта и выставляет те данные точно таким же образом восходящей системе, которая читает его...

2
ответ дан 5 December 2019 в 15:27
поделиться

Кажется, что Вам нужна Стратегическая модель, которая позволяет Вам реализовывать алгоритм различными способами:

http://en.wikipedia.org/wiki/Strategy_pattern

1
ответ дан 5 December 2019 в 15:27
поделиться

Вы могли также рассмотреть использование Шаблона "команда", где у Вас будет Действие в течение времени досягаемости типа файла, необходимо обработать. Таким образом, Вы можете иметь гибкость для всех форматов и придерживаться последовательных параметров, которых потребует Ваш процесс.

Другое преимущество - то, что можно создать новые Действия для каждого нового формата файла, не осуществляя рефакторинг код для других форматов.

1
ответ дан 5 December 2019 в 15:27
поделиться

Во-первых, создайте свою модель "Online Poker Hand History". Эта модель представит данные и сможет обработать это информационно-независимо из источника. Затем создайте поставщиков для каждого из форматов другого источника, которые должны быть способны к преобразованию информации файла в модель.

Править: например.

public interface IDataProvider
{
    IOnlinePokerInfo ParseFileInformation(FileInfo input);
}

public interface IOnlinePokerInfo
{
    int Hand { get; set; }
    DateTime DateInfo { get; set; }
    List<IPlayer> Players { get; set; }
    void ProcessInformation();
}

public interface IPlayer
{
    string Name { get; set; }
}

public class MyOnlinePokerInfo : IOnlinePokerInfo
{
    private int hand;
    private DateTime date;
    private List<IPlayer> players;

    public int Hand { get { return hand; } set { hand = value; } }
    public DateTime DateInfo { get { return date; } set { date = value; } }
    public List<IPlayer> Players { get { return players; } set { players = value; } }

    public MyOnlinePokerInfo(int hand, DateTime date)
    {
        this.hand = hand;
        this.date = date;
        players = new List<IPlayer>();
    }

    public MyOnlinePokerInfo(int hand, DateTime date, List<IPlayer> players)
        : this(hand, date)
    {
        this.players = players;
    }

    public void AddPlayer(IPlayer player)
    {
        players.Add(player);
    }

    public void ProcessInformation()
    {
        Console.WriteLine(ToString());
    }

    public override string ToString()
    {
        StringBuilder info = new StringBuilder("Hand #: " + hand + " Date: " + date.ToLongDateString());
        info.Append("\nPlayers:");
        foreach (var s in players)
        {
            info.Append("\n"); 
            info.Append(s.Name);
        }
        return info.ToString();
    }
}

public class MySampleProvider1 : IDataProvider
{
    public IOnlinePokerInfo ParseFileInformation(FileInfo input)
    {
        MyOnlinePokerInfo info = new MyOnlinePokerInfo(1, DateTime.Now);
        IPlayer p = new MyPlayer("me");
        info.AddPlayer(p);
        return info;
    }
}

public class MySampleProvider2 : IDataProvider
{
    public IOnlinePokerInfo ParseFileInformation(FileInfo input)
    {
        MyOnlinePokerInfo info = new MyOnlinePokerInfo(2, DateTime.Now);
        IPlayer p = new MyPlayer("you");
        info.AddPlayer(p);
        return info;
    }
}

public class MyPlayer : IPlayer
{
    private string name;
    public string Name { get { return name; } set { name = value; } }

    public MyPlayer(string name)
    {
        this.name = name;
    }
}

public class OnlinePokerInfoManager
{
    static void Main(string[] args)
    {
        List<IOnlinePokerInfo> infos = new List<IOnlinePokerInfo>();

        MySampleProvider1 prov1 = new MySampleProvider1();
        infos.Add(prov1.ParseFileInformation(new FileInfo(@"c:\file1.txt")));

        MySampleProvider2 prov2 = new MySampleProvider2();
        infos.Add(prov2.ParseFileInformation(new FileInfo(@"c:\file2.log")));

        foreach (var m in infos)
        {
            m.ProcessInformation();
        }
    }
}
1
ответ дан 5 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: