|
|
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
К примеру есть такая входная строка: z - min(z123, 456) + (k2) / sqrt(x) * (SomeFunc("Sunshine 34",f_var) + 45 - t) Суть в том, чтобы вытащить переменные (z, z123, k2, x, f_var, t) и заменить их какими-то числами. А суть вопроса, как вытащить-то ? Какую логическую базу подвести ? Если вдруг что, C# .NET 4.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 12:57 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
tual, Ищи статьи по лексическому разбору программ и выражений. https://ru.wikipedia.org/wiki/Лексический_анализ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 14:01 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
tualА суть вопроса, как вытащить-то ? Какую логическую базу подвести ? Если вдруг что, C# .NET 4.0 Регулярки там есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 14:12 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Если есть - примерно так... Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 14:40 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Вам помогут регулярные выражения. RegExp в простонародье. Регулярные выражения в .NET Framework ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 14:53 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
eldarkaaВам помогут регулярные выражения. RegExp в простонародье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 15:02 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
krysa, у вас тут сущий винегрет в коде :) можете проще подсказать регулярку на переменную... а есче интересно, как вы избежали текста внутри кавычек... там тоже может быть текст похожий на переменную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 15:18 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 15:22 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
tualkrysa, у вас тут сущий винегрет в коде :) Пример полностью рабочий! Т.ч. не гони волну... tualможете проще подсказать регулярку на переменную... Это как понять? Метод match() как раз их все и покажет... tualа есче интересно, как вы избежали текста внутри кавычек... там тоже может быть текст похожий на переменную Для этого я убрал текст "в кавычках" методом replace()... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 15:27 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
tualвытащить переменные (z, z123, k2, x, f_var, t) и заменить их какими-то числами.а какими числами? есть карта (имя_переменной, значение)? если есть, то все просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 15:45 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Да это грубо говоря часть некоего задания... неважно откуда строка взялась, неважно что с ней будет потом. Надо просто найти переменные, и потом заменить их произвольными числами. Ну разве что если переменная X встретилась не один раз, то заменить одним и тем же числом. Вся беда в регулярках, в которых я слаб :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:00 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
tualВся беда в регулярках, в которых я слаб :) Регулярки они и в Африке регулярки... Просто возьми мой пример и все дела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:07 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Взял :) Надо ж еще понять, что в нем и как :) Вот почитал доку и понял где что и почему в нем. Даже добавил оператор % и учел переменные начинающиеся с _ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:16 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
tualДаже добавил оператор % и учел переменные начинающиеся с _ :)а случай, когда строка оканчивается на переменную, учел? (если к твоему примеру в конец добавить "+ z") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:19 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
а кстати нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:22 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
А как его учесть, куда $ засунуть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:26 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
tualА как его учесть, куда $ засунуть ?после [\s\-\,\)\+\*\/] и [\\s\\-\\,\\)\\+\\*\\/] добавь |$ хотя все равно есть баг и вопрос. баг - если в строку "Sunshine 34" поместить z, например, так "Sunshine z 34", то он заменится. вопрос - возможны ли в строках экранирования кавычек, например, \" (а так же экранирования экранирований \\). Если да, то есть ещё один баг :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:36 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Про экранированные кавычки ничего не сказано. Про текст внутри кавычек - это типа строковая константа, то есть в ней априори нет переменных, просто какая-то константа. Я в js regexp не секу просветите об этом месте Код: javascript 1. 2. 3. 4. по смыслу тут понятно, что найденные места заменяются текстом {i}, но мне надо это перевести на c# но какими методами не понимаю, ибо на js не понял :) тем более что замена идет уже на строке оригинала, там где был стерт текст с кавычками, то есть явно без ориентации на индекс в строке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:46 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
tualПро текст внутри кавычек - это типа строковая константа, то есть в ней априори нет переменных, просто какая-то константа.вот и я про то. "Sunshine z 34" должно остаться как есть, а сейчас заменяется на " "Sunshine {0} 34"" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:49 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Лучше с другим моим вопросом подскажите... А то если не пойму просто способа, мне придется в лоб собирать строку по индексам и оффсетам. PS Насчет текста в кавычках, его видимо тоже придется так собирать. PPS Матч на переменные я делаю при отброшенном тексте с кавычками (replace), так что то не проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 16:55 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
tualМатч на переменные я делаю при отброшенном тексте с кавычками (replace), так что то не проблема.это понятно. только вот последующую замену переменных на значение ты делаешь на исходной строке, и если в ней нашлась переменная z не внутри кавычек, то заменится она так же и внутри. вот, набросал функцию Код: 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. заменяет переменные на рандомщину. Одинаковые переменные - одинаковые значения. учтено все кроме экранирования кавычек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 17:36 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
а вот это может экранирования кавычек обработать ) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 17:50 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
если хотите что бы этот код потом можно было поддерживать лучше генератором воспользоваться аналогичным LEX например если разберётесь, это окупится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 18:29 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Яростный Мечбаг - если в строку "Sunshine 34" поместить z, например, так "Sunshine z 34", то он заменится. Понятное дело, что с кавычками придется дорабатывать... Прятать их сначала, потом работать с переменными. По окончанию замен "возвращать" строковые константы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 08:27 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)лучше генератором воспользоваться аналогичным LEX а просто конечный автомат - никак не реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 21:44 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Изопропилkealon(Ruslan)лучше генератором воспользоваться аналогичным LEX а просто конечный автомат - никак не реализовать? так они большинство и делают ДКА, вручную хотите его составлять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 20:54 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)вручную хотите его составлять? да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 21:18 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
вот, кстати, хорошее описание, коротко и по делу ему достаточно разбить на токены и собрать назад LEX с этим прекрасно справляется, остаётся найти аналог для C# ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 21:25 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)остаётся найти аналог для C# токенизатор - экран текста и никаких зависимостей и чтения лицензий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 22:02 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Изопропилkealon(Ruslan)вручную хотите его составлять? да если только из любви к извращенствам искусству Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 22:59 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Вставлю свои 5 копеек. Задача 1 в 1 похожа на шаблонный проект для FsLex (на F#). Собственно, почему бы не подключить к проекту F# либу, решающую задачу, чем геммороиться со своим парсером? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 12:22 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
Alex MarmuzevichВставлю свои 5 копеек. Задача 1 в 1 похожа на шаблонный проект для FsLex (на F#). Собственно, почему бы не подключить к проекту F# либу, решающую задачу, чем геммороиться со своим парсером? а никто и не говорит ему подключать свой парсер, говорят возьми аналог Flex-а это так, пример - исскуства ради (вернее для более изощрённых целей) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 14:31 |
|
||
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#18+
в bat-нике реализовываю команду sleep, но при выполнении пишет "Неправильное число. Числовые константы должны быть десятичными (17), шестнадцатеричными (0x11),или восьмеричными (021)." не понимаю, в чем ошибка. Подскажите пожалуйста @echo off set sleep=%1 :main set a=%1 set a| find "/?" > nul if %ERRORLEVEL%==0 goto printhelp for /F "tokens=1,2,3,4 delims=:," %%a in ("%time%") do set /a firstSeconds=(%%a*3600+%%b*60+%%c)*100+%%d goto :papap :papap echo %sleep%| findstr /R "[^0123456789]" > nul if %ERRORLEVEL% == 0 goto :error for /F "tokens=1,2,3,4 delims=:," %%a in ("%time%") do set /a lastSeconds=(%%a*3600+%%b*60+%%c)*100+%%d set /a result1=%firstSeconds%+%sleep% set /a result2=%sleep%-8640000+%firstSeconds% if %lastSeconds% EQU %result1% goto :end if %lastSeconds% EQU 0 goto :end if %lastSeconds% EQU %result2% goto :end goto :papap :end echo all exit /b :printhelp echo You reed /? exit /b :error echo I can not calculate data exit /b ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 16:39 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1341189]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
145ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 471ms |

| 0 / 0 |
