Замена в строке макросов на данные - C#
Формулировка задачи:
Цель
- Полученную от пользователя строку такого рода: "ерунда %data %N %Type Еще малясь ерунды" преобразовать в новую строку "ерунда 11.2976 17 int Еще малясь ерунды" Т.Е. нужно заменить макросы на данные. Как лучше это организовать? Вид самих макросов не обязательно должен быть таким. Суть в том чтоб пользователь смог их вводить в ручную (они должны быть короткими), но пользователь мог понять на что они будут изменены еще до замены. Всего макросов будет 20-30 1) Искать совпадения с каждым из этих 30 в этой строке, а затем заменять. Т.Е. Пропускать 30 разных циклов. 2) Искать общий символ, тот же % скажем. А уже затем выяснять что это за макрос. (Длина скорее всего будет разная) Есть ли способы лучше? (Быстрее) В каком виде хранить список этих макросов? Изначально половина данных уже хранится в памяти (для подстановки) лежит это все дело в структуре. Мне бы не хотелось нагружать эту структуру всеми 30. Лично я себе представляю 2 for'a вложенных в друг друга в первом будет проходить по массиву string[] с этими макросами получая искомый в данный момент макрос, а так же подбор через swich варианта замены для него. Во втором Цикле поиск совпадения замена его, и поиск повторно. (Для избежания ошибок при 2 и более одинаковых макросах) Однако такой код будет громоздкий, да и не быстрый. (Даже если проверить на наличие этих % перед циклом)Решение задачи: «Замена в строке макросов на данные»
textual
Листинг программы
int Counter = 0; var Macro = new Dictionary<string, Func<object>>() { { "counter", () => Counter++ }, { "date", () => DateTime.Now }, { "const_a", () => "A" } }; string Text = "Counters: %COUNTER %COUNTER Percent: %% Date: %DATE Const: %CONST_A"; Text = Regex.Replace(Text, @"%(?<m>(\w|_)+|%)", (m) => { string name = m.Groups["m"].Value.ToLower(); if (name == "%") return "%"; if (!Macro.ContainsKey(name)) throw new Exception("Макрос <" + name + "> не найден"); return Macro[name]().ToString(); }); Console.WriteLine(Text);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д