|
|
|
Парсинг математического выражения
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38750579&tid=1341189]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 520ms |

| 0 / 0 |
