Шаблоны: парсинг текстового файла
От: Аноним  
Дата: 25.10.06 13:59
Оценка:
Привет!
Народ, подскажите, есть ли какие "шаблонизаторы" для C#...

например есть текстовый файл с маской (first.txt):

sssss sssssssss {$some_name} sssssss sssssssss
sssssssssssssss {$some_description} ssssssssss
ssss {$some_extra_info} ssssssssssssssssssssss

где s — какой-либо символ

Нужно
вместо {$some_name} подставить некоторое значение (i.e. MyDataInfo.someName)
вместо {$some_description} подставить MyDataInfo.someDescription
вместо {$some_extra_info} подставить содержимого некоторого текстового файла (впринципе, чего угодно...)

Есть ли какие-либо библиотеки, позволяющие работать с шаблонами?

Например, на PERL я это делаю его встроенными синтаксическими конструкциями, на PHP при помощи различных Smarty, HTML_Template_IT и прочее
Как и чем это можно сделать на C#

Спасибо.
Re: Шаблоны: парсинг текстового файла
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 25.10.06 14:54
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Привет!

А>Народ, подскажите, есть ли какие "шаблонизаторы" для C#...

NVelocity (желательно именно тот, который часть Castle Project)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
HgLab: Mercurial Server and Repository Management for Windows
Шаблоны: парсинг текстового файла
От: Аноним  
Дата: 25.10.06 16:22
Оценка:
А как насчет, Hashtable(или другой dictionary) + String.Replace?
Тем более что списков и условий у вас нет.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Шаблоны: парсинг текстового файла
От: Аноним  
Дата: 26.10.06 09:13
Оценка:
Здравствуйте, borisd, Вы писали:

B>А как насчет, Hashtable(или другой dictionary) + String.Replace?

B>Тем более что списков и условий у вас нет.


Это будет решение "на коленке",хотелось бы уже проверенное и отлаженное средство, с небольшим, но гибким "языком" макро-подстановок, вложенными блоками и прочее.

начинать писать самому? — естественно, однако, в любом случае, прийдётся потратить много времени на оптимизацию и прочее...
я просто удивлён, что для .NET нет чего-то подобного

...имхо, уж простой парсинг текстовых файлов по шаблону, можно было бы добавить (более универсальной среда бы оказалась... не только для Кристал-Репортовских решений)
Re[2]: Шаблоны: парсинг текстового файла
От: Аноним  
Дата: 26.10.06 09:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>...имхо, уж простой парсинг текстовых файлов по шаблону, можно было бы добавить (более универсальной среда бы оказалась... не только для Кристал-Репортовских решений)


Ну вам же уже говорили — http://nvelocity.sourceforge.net/

А кристал... кристал это ужасный оцтой... ровно как и выбранная Вами технология для описанных выше задач...

Например, на PERL я это делаю его встроенными синтаксическими конструкциями, на PHP при помощи различных Smarty, HTML_Template_IT и прочее



зачем Вам понадобился C# ???
Re: Шаблоны: парсинг текстового файла
От: GlebZ Россия  
Дата: 26.10.06 10:18
Оценка:
Здравствуйте, <Аноним>, Вы писали:

RegEx.Replace. Там есть делегат с помощью которого ты можешь подставлять свои значения.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Шаблоны: парсинг текстового файла
От: Аноним  
Дата: 26.10.06 12:41
Оценка: :)
Здравствуйте, GlebZ, Вы писали:

GZ>RegEx.Replace. Там есть делегат с помощью которого ты можешь подставлять свои значения.

мда... "очень удобно" по сравнению с обычными Шаблонизаторами...
а ксли этих шаблонов у меня ЦЕЛАЯ куча, придставляете, в какую кашу преврадится проект?
Хардкодинг зависимостей, никакого принципа MVC (во вменяемом смысле этого принципа) и прочее...
Re[3]: Шаблоны: парсинг текстового файла
От: Аноним  
Дата: 26.10.06 12:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>

Например, на PERL я это делаю его встроенными синтаксическими конструкциями, на PHP при помощи различных Smarty, HTML_Template_IT и прочее


А>зачем Вам понадобился C# ???

...это не мне, это новая паранойя шефа, каким способом предлагаете ему это объяснить?
Re[4]: Шаблоны: парсинг текстового файла
От: Аноним  
Дата: 26.10.06 13:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>...это не мне, это новая паранойя шефа, каким способом предлагаете ему это объяснить?


дать ссылку на это обсуждение

зы: а вообще-то, если хорошо владеете одной технологией, то воспользуйтесь опытом тех, кто уже не однократно обжёгся на PR-компаниях микрософт — не ведитесь!

Золотое правило: рулит то, в чём разбираешься лучше
Re[3]: Шаблоны: парсинг текстового файла
От: GlebZ Россия  
Дата: 26.10.06 14:09
Оценка:
Здравствуйте, <Аноним>, Вы писали:

GZ>>RegEx.Replace. Там есть делегат с помощью которого ты можешь подставлять свои значения.

А>мда... "очень удобно" по сравнению с обычными Шаблонизаторами...
А>а ксли этих шаблонов у меня ЦЕЛАЯ куча, придставляете, в какую кашу преврадится проект?
А>Хардкодинг зависимостей, никакого принципа MVC (во вменяемом смысле этого принципа) и прочее...
По моему вас лень обуяла. Судя тому что вы написали в исходном сообщении, делается все очень просто.

    public class Shablons
    {
        public delegate string ReplaceValue();
        private static Regex regex = new Regex(@"\{$(?<tag>\w*)\}",/*нужное сам поставишь*/);
        private Dictionary<string, ReplaceValue> _shablons=new Dictionary<string,ReplaceValue>();
        public string DoWork(string str)
        {
            return regex.Replace(str, delegate(Match match)
                                   {
                                       if (!_shablons.ContainsKey(match.Value)) return match.Value;
                                       return _shablons[match.Value]();
                                   });
        }
        public void RegisterShablon(string key, ReplaceValue value)
        {
            _shablons.Add(key, value);
        }
    }
                
        Shablons sha = new Shablons();
        sha.RegisterShablon("{$shablon1}", delegate(){return MyData.Proc1();});
        sha.RegisterShablon("{$shablon2}", delegate(){return MyData.Proc2();});
        sha.RegisterShablon("{$shablon3}", delegate(){return MyData.Proc3();});
        sha.RegisterShablon("{$shablon4}", delegate(){return MyData.Proc4();});
        Console.WriteLine(sha.DoWork(source));

Штук 20 строк кода в функциональном стиле и золотой ключик у нас в кармане. После исправления всех ошибок(писал сходу и не проверял) можно юзать. И времени ушло меньше чем на поиски.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.