#c# #mailmerge
#c# #mailmerge
Вопрос:
Я работаю над проектом на C #, и давайте предположим, что у меня есть строка, содержащая что-то вроде этого:
string content = "[IF FullName = 'Bob Smith']Hello my friend";
content = "[ELSEIF TotalPurchases > 1000]Dear valued customer";
content = "[ELSE]Dear [FirstName]";
content = "[ENDIF]";
и давайте предположим, что у меня есть словарь ключей / значений, где ключами являются «Полное имя» и «Итоговые покупки», а значениями являются «Неизвестная Доу» и «500». Какой был бы хороший способ проанализировать содержимое и, что наиболее важно, оценить «ЕСЛИ … ИНАЧЕ…ENDIF»?
Есть ли проект с открытым исходным кодом, который я могу использовать, или я должен просто написать свой собственный код для анализа содержимого?
Ответ №1:
Я немного сбит с толку. Это действительно ваша строка, или вы говорите о строке, которая будет сгенерирована этим исходным кодом C #?
Я предполагаю последнее, и я, вероятно, просто проанализировал бы его сам, поскольку он не слишком сложный и несколько специализированный. Я также написал вспомогательный класс для синтаксического анализа текста, который может вам помочь.
Комментарии:
1. Пример в моем вопросе немного упрощен, но он довольно близок к фактической строке. Моя цель — иметь возможность оценивать «ЕСЛИ … ИНАЧЕ»… ENDIF» для создания окончательного содержимого. Например, если мои данные содержат «Боб Смит», результирующим контентом будет «Привет, мой друг», если мои данные содержат «Неизвестная Доу», а Джейн потратила более 1000 долларов, результирующим контентом будет «Дорогой уважаемый клиент» и т.д. Спасибо, что предложили свой вспомогательный класс, но, боюсь, он слишком упрощен для моих нужд.
2. @desautelsj: Это нормально, если вы не используете мой класс. Но я подумал, что стоит упомянуть, что я использовал его для написания интерпретатора языка. Класс делает не так уж много, но я использую его как базовый класс, который упрощает низкоуровневый синтаксический анализ.
3. звучит интересно… можете ли вы поделиться своим интерпретатором языка?
4. В конечном итоге я планирую опубликовать это на моем сайте Black Belt Coder , но это может занять некоторое время, поскольку я занят другими проектами. (Хотя я доступен для консультаций. 🙂
Ответ №2:
Один из вариантов — заменить текстовые данные ‘If Else End If’ выше на фактическую логику инструкции if C # и скомпилировать ваш динамически созданный текст C # во время выполнения, чтобы оценить вашу логику if. Основным классом для обработки этой динамической компиляции C # будет класс CSharpCodeProvider
Информация о CSharpCodeProvider http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx