Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, помогите пожалуйста распарсить строку на с++. Мне надо из строки "Select VDC col_3 where col_1 = 200m and col_2 = 300m and col_3 = 400m and col_4 = AA and col_5 = B3B and col_6=4C4" вытащить 200m, 300m, 400m, AA, B3B, 4C4 Пробовал сделать таким образом, но ничего не выходит. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 17:25 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Serega325Здравствуйте, помогите пожалуйста распарсить строку на с++. Мне надо из строки "Select VDC col_3 where col_1 = 200m and col_2 = 300m and col_3 = 400m and col_4 = AA and col_5 = B3B and col_6=4C4" вытащить 200m, 300m, 400m, AA, B3B, 4C4 Пробовал сделать таким образом, но ничего не выходит. std::string str = "Select VDC col_3 where col_1 = 200m and col_2 = 300m and col_3 = 400m and col_4 = AA and col_5 = B3B and col_6=4C4" while (str.length() > 0) { std::tr1::regex rx("(=\x020*[-+]?[0-9]+[\.\,]?[0-9]+(([eE][-+]?[0-9]+)|((p)|(u)|(m)|(k)|(M)|(G)|(п)|(мк)|(м)|(к)|(М)|(Г)))?)|(=\x020*\w+)"); std::tr1::regex_search(str.c_str(), res, rx); size_t pos = str.find(res[0].str().c_str()); //printf("%d. Str = %s\n", k, str.c_str()); str = str.substr(pos+res[0].length()).c_str(); printf("Resalt : %s length = %d pos = %d \n ",res[0].str().c_str(),res[0].length(),pos); if (res[0].length() <= 0) str.clear(); } Кроме 200m, 300m, 400m, AA, B3B, 4C4 надо еще вытащить and (может быть or), т.е. 200m, 300m, 400m, AA, B3B, 4C4 , and, or ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 17:35 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Я не знаю зачем тебе это нужно. По идее чтобы решить эту задачу тебе нужно проверить что символ равен знаку равно '=' , разделителю, или любому произвольному символу. Вобщем... лучшее - враг хорошего. Почитай до кучи интересную статью на хабре https://habrahabr.ru/post/175375/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2016, 23:41 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Serega325, вряд ли тебе regex::search нужно, а не match. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2016, 00:26 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Serega325, попробуйте так: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2016, 03:40 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Serega325надо из строки вытащить 200m, 300m, 400m, AA, B3B, 4C4 , and, or Код: plaintext 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. результат:Logic: and Col1: 200m Col2: 300m Col3: 400m Col4: AA Col5: B3B Col6: 4C4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 00:04 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Можно в принципе и имена вытащить, если вдруг они идут не по порядку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 00:07 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
DeviLooperМожно в принципе и имена вытащить, если вдруг они идут не по порядку Вот так будет правильнее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2016, 00:16 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Все равно плохо. Постановка простая. А комплексность инструментов которые вы вовлекаете - избыточна. Я-бы упрощал до тех пор пока проходят модульные тесты. А если вы считаете что вы покрыли все случаи - тогода Хахаха. Грамматика SELECT более сложна даже чем данная регулярка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 15:17 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
регулярные выражения не годятся для КС-грамматик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 15:47 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
maytonА если вы считаете что вы покрыли все случаи - тогода Хахаха. Грамматика SELECT более сложна даже чем данная регулярка. Ну топик стартер поставил конкретную задачу. А фантазировать как может быть, а как нет в условия не входило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 16:59 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Serega325Кроме 200m, 300m, 400m, AA, B3B, 4C4 надо еще вытащить and (может быть or), т.е. 200m, 300m, 400m, AA, B3B, 4C4 , and, or DeviLooperНу топик стартер поставил конкретную задачу. А фантазировать как может быть, а как нет в условия не входило. наблюдаю в постановке задачи необходимость разбора логического выражения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 17:05 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Изопропил, но он не говорл, что ему нужен универсальный парсер sql запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 17:16 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
а логику я вытащил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 17:17 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
DeviLooperИзопропил, но он не говорл, что ему нужен универсальный парсер sql запроса да, только выражение распарсить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 17:26 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Изопропил, может он сам за себя скажет что ему надо ? Хотя, судя по всему, ему уже ничего не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 17:30 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Лабу он сдал. И бухает себе. Тащемта топик можно закрыть за бесполезностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 17:32 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
maytonЛабу он сдал. И бухает себе. Тащемта топик можно закрыть за бесполезностью. Не бухаю, а ищу пути решения. Вот нашел в гугле код, функция check рекурсивно проходит по строке, ищет && или ||, потом делит строку на две части и снова вызывается check и т.д. Когда все разделители (&& и ||) прошли, идет сравнения выражений (col_4=AA) Код: plaintext 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. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. Но этот алгоритм работает медленно когда большой массив и сложный select запрос, например Код: plsql 1. ", также вместо and, or надо писать &&,|| и выражения между логическими операциями должны быть в скобках. Модератор: Оформляй сорцы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 17:20 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
ИзопропилDeviLooperИзопропил, но он не говорл, что ему нужен универсальный парсер sql запроса да, только выражение распарсить Нужно сделать select запрос к массиву, т.е. в программу приходит массив char megamass[][20][20] = { { { "1" },{ "3" },{ "200" },{ "20" } }, { { "30" },{ "9" },{ "300" },{ "30" } }, { { "3" },{ "500" },{ "4000" },{ "40" } }, { { "1" },{ "3" },{ "200" },{ "20" } }, { { "30" },{ "9" },{ "300" },{ "30" } }, { { "3000" },{ "500" },{ "4000" },{ "40" } } }; Пользователь пишет запрос Select VDC col_3 where ((col_3>col_4) and (col_2_>col_1)) or ((col_1>20) and (col_2=9)) После чего из массива надо получить { { "30" },{ "9" },{ "300" },{ "30" } }, { { "30" },{ "9" },{ "300" },{ "30" } }, { { "3" },{ "500" },{ "4000" },{ "40" } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 17:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39282103&tid=2018465]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 144ms |

| 0 / 0 |
