powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как вычислить выражение?
16 сообщений из 116, страница 5 из 5
как вычислить выражение?
    #38070324
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Яростный Меч,

У меня от идентификаторов , начинающихся с _ - идиосинкразия
А так - хорошо. Только вот думаю, а нафиг это надо, в браузере функции считать?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070712
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erLexxxxxЯ х....ею, дорогая редакция! Ну да, процедурный подход, все должно быть видно всем, хаос, анус!
а вот не надо.не надо уеть.
всё ж не просто так. я не с балды пишу такие "крамольные" вещи. наверное что то я под этим подразумеваю. ща пишу прогу, так , когда делать нечего. так вот в ней >95% методов статических (а в дальнейшем >99%). и архитектурой там не пахнет. куда хочу, туда ворочу. волюшка воля.
так что не надо уеть. а вопрос видимости это вопрос выбора, не более. я пишу под конкретную задачу. и там на это наплевать. и никакого хаоса. только строгий порядок.

У тебя там 1 God класс? DoAll? Бггг)))

Простите, не удержался :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070806
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АбсолютУ тебя там 1 God класс? DoAll? Бггг)))
Простите, не удержался :)
нет, вы не поняли , там нет Год-класса. им там даже не пахнет.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38070837
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38071193
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Изопропил spring net expressions
Круто. Начинающие программисты всегда хотят написать универсальный код, который решает все задачи, нынешние и будущие
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38071946
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В копилку.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38072106
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Берём ANTLR и пишем свою вычислялку :)
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38072112
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAБерём ANTLR и пишем свою вычислялку :)
Бабуль, я всё еще не вижу тестового C#-солюшена.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38072409
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, ты о чём?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38190565
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вот. Мне тоже понадобилось. Надо перводить даты из самых диких форматов, причем сколько этих форматов будет - неясно. И уже совсем было решил заняться рефлексией, как нашел

Кодогенерация на лету C#
Код автора:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
public static Delegate CSharpCompilate(Type DelegateType, string Expression)
        {
            // Получаем образ компилируемого метода для информации о параметрах(число, типы, имена)
            MethodInfo InvokeInfo = DelegateType.GetMethod("Invoke");
            if (InvokeInfo == null)
                throw new NotSupportedException(string.Concat("Type \"", DelegateType.ToString(), "\" must be is delegate"));
            else
            {
                // строка коспиляции С# кода
                StringBuilder compileString = new StringBuilder(128);
                // Обявляем класс со статическим методом "Invoke"
                compileString.Append("class _My{public static ").Append(InvokeInfo.ReturnType == typeof(void) ? "void" : InvokeInfo.ReturnType.FullName).Append(" ").Append("Invoke(");
                // Получаем информацию обо всех параметрах функции
                // И заносим их в строку-компиляции
                foreach (var Param in InvokeInfo.GetParameters())
                {
                    // Если параметр имет тип ref или out
                    if (Param.ParameterType.IsByRef) compileString.Append("ref ").Append(Param.ParameterType.FullName.Replace('+', '.').TrimEnd('&')).Append(" ").Append(Param.Name).Append(",");
                    // Иначе
                    else compileString.Append(Param.ParameterType.FullName.Replace('+', '.')).Append(" ").Append(Param.Name).Append(",");
                }
                compileString[compileString.Length - 1] = ')';
                // Добавляем вместо тела функции наше выражение
                compileString.Append("{").Append(Expression).Append(";}}");

                //Объявляем провайдер кода С#
                CSharpCodeProvider prov = new CSharpCodeProvider();
                // В параметрах компидяции - подключаем все сборки "родительского" приложения(чтоб не мучиться)

                CompilerParameters cp = new CompilerParameters(Array.ConvertAll<Assembly, string>(AppDomain.CurrentDomain.GetAssemblies(), x => x.Location));
                // Помечаем сборку, как временную
                cp.GenerateInMemory = true;
                // Обрабатываем CSC компилятором
                string codeString = compileString.ToString();
                CompilerResults results = prov.CompileAssemblyFromSource(cp, codeString);
                // Если есть ошибки - собираем их и выдаем исключение
                if (results.Errors.Count > 0)
                {
                    StringBuilder errorString = new StringBuilder("Error of C# Compilation CS");
                    errorString.AppendLine("Number of Errors: " + results.Errors.Count);
                    foreach (CompilerError err in results.Errors)
                        errorString.AppendLine(err.ErrorText);
                    throw new NotSupportedException(errorString.ToString());
                }
                // Если ошибок нет, то с помощью отражения достаем из временной сборки нашу функцию
                else return Delegate.CreateDelegate(DelegateType, results.CompiledAssembly.GetType("_My").GetMethod("Invoke"));
            }
        }



Использование

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public delegate DateTime ConvertAVDate(object x);
...
string wmiDate = "20130319194630.659000+240";
string kavDate = "2013-01-01 13-24-45";
long t = DateTime.Now.Ticks;

string code;
            
code = "return System.Management.ManagementDateTimeConverter.ToDateTime(x.ToString())";
Console.WriteLine((CSharpCompilate(typeof(ConvertAVDate), code ) as ConvertAVDate)(wmiDate));

code = "return new System.DateTime(System.Convert.ToInt64(x))";
Console.WriteLine((CSharpCompilate(typeof(ConvertAVDate), code) as ConvertAVDate)(t));

code = "return System.DateTime.ParseExact(x.ToString(), \"yyyy-MM-dd HH-mm-ss\", null)";
Console.WriteLine((CSharpCompilate(typeof(ConvertAVDate), code) as ConvertAVDate)(kavDate));

Console.ReadKey();
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38190705
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2, и в чём прикол? Почему не так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
string wmiDate = "20130319194630.659000+240";
string kavDate = "2013-01-01 13-24-45";
long t = DateTime.Now.Ticks;

Console.WriteLine(Management.ManagementDateTimeConverter.ToDateTime(wmiDate));
Console.WriteLine(new DateTime(t));
Console.WriteLine(DateTime.ParseExact(kavDate, "yyyy-MM-dd HH-mm-ss", null));
Console.ReadKey();

?
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38192085
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
skyANA,

Потому что это крутится в сервисе и, если мне надо распознать какой-то новый формат, то я пишу в конфиге новый строковый парсер, а не перекомпилирую сервис и не останавливаю его для загрузки новой версии. Ибо остановка этого сервиса на 10 секунд может привести к серьезной проблеме у пользователь-неудачника, который попадет на эти 10 секунд.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38192546
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
devexpress:
Код: c#
1.
2.
            var evaluator = new DevExpress.Data.Filtering.Helpers.ExpressionEvaluator(null, "10 * 2 - 1 + cos(0)");
            var res = evaluator.Evaluate(null);
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38192716
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2skyANA,

Потому что это крутится в сервисе и, если мне надо распознать какой-то новый формат, то я пишу в конфиге новый строковый парсер, а не перекомпилирую сервис и не останавливаю его для загрузки новой версии. Ибо остановка этого сервиса на 10 секунд может привести к серьезной проблеме у пользователь-неудачника, который попадет на эти 10 секунд.Аааааа! Ну так с описания задачи и надо было начинать.

Её можно и иначе решить, например: динамическим подключением сборки с форматами и конвертаторами.
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38193022
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую в работе Ciloci Flee - работает шустро. Правда, проект давно не обновляется.

Ciloci Flee
...
Рейтинг: 0 / 0
как вычислить выражение?
    #38193833
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
skyANAАааааа! Ну так с описания задачи и надо было начинать.
Это топик про различные способы вычислений. Тут задача не важна.


skyANAЕё можно и иначе решить
Разумеется. Можно к веб-сервисам обращаться. Практически таже компиляция на лету.
Много всего чего придумать можно.
Но парсинг даты задача мелкая, мне удобно в базе одну строку хранить.
...
Рейтинг: 0 / 0
16 сообщений из 116, страница 5 из 5
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как вычислить выражение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]