Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
PowerBuilder 9.0.2 Проблема в следующем: Есть некоторые шаблоны, типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. где Код: plaintext 1. 2. Нужно заменить содержимое блоков на некоторые строковые данные. Я написал функцию, которая делает: 1) Ищет наименования блоков 2) Для каждого найденного наименования блока находит его содержимое (то есть между START и END) 3) Имея содержимое блока заменяет его на нужные строковые данные. Все работает, НО, когда количество блоков становится значительным... где то более 500, то функция значительно начинает подтормаживать расходуя для вычисления процессор (с памятью там все OK, так как делается через reference). Не подскажет ли мне всемирный разум что нибудь на тему работы с текстовыми данными в направлении поиска/замены, для оптимизации моего алгоритма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 14:44 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
Извини, не удержался. Такое я пропустить мимо не мог: 1. Написание Parser -ов на PowerBuilder есть полнейшая глупость. Не веришь мне? Спроси у ASCRUS , он писал парсер в свое время... Нужно понимать, что есть PowerBuilder и не пытаться делать на нем то, для чего он не предназначен. 2. Когда мы начинали делать модуль для работы с XML форматом ЦБ рейсов, один шибко умный чудило, тоже предложил написать свой парсер для разбора текста. Каким то чудом, удалось этого избежать. И я нисколько об этом не жалею... 3. Я бы настоятельно советовал избавиться от этой идеи или реализовать Parser на другом языке программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 15:35 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
Black SavageИзвини, не удержался. Такое я пропустить мимо не мог: 1. Написание Parser -ов на PowerBuilder есть полнейшая глупость. Не веришь мне? Спроси у ASCRUS , он писал парсер в свое время... Нужно понимать, что есть PowerBuilder и не пытаться делать на нем то, для чего он не предназначен. 2. Когда мы начинали делать модуль для работы с XML форматом ЦБ рейсов, один шибко умный чудило, тоже предложил написать свой парсер для разбора текста. Каким то чудом, удалось этого избежать. И я нисколько об этом не жалею... 3. Я бы настоятельно советовал избавиться от этой идеи или реализовать Parser на другом языке программирования. Реализовать такой Parser на другом языке в данном конкретном случае не представляется возможным, но вы натолкнули меня на мысль... в сторону XML... кстати по поводу этого вопрос: c XML работать через PBDOM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 15:49 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
Сотниковкстати по поводу этого вопрос: c XML работать через PBDOM? Да. А, что не плохая идея. Прописать все ваши шаблоны, как XML документы. Тогда доступ к данным будет стандартизированный, другие ваши (не ваши) проги смогут цеплять/изменять данные без труда. Наверное, стоит об этом подумать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 16:00 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
Об этом я и подумал... !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 16:16 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
СотниковНе подскажет ли мне всемирный разум что нибудь на тему работы с текстовыми данными в направлении поиска/замены, для оптимизации моего алгоритма. Покажите код функции. Если используете string, попробуйте предварительно резервировать память вызовом типа space(n) или fill(chars,n). На постоянных realloc'ах при больших строках билдер будет "проседать". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 16:21 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
Локшин Марк Покажите код функции. Я думаю не многим нужно в нём разбираться. Но всё же... Локшин Марк Если используете string, попробуйте предварительно резервировать память вызовом типа space(n) или fill(chars,n). На постоянных realloc'ах при больших строках билдер будет "проседать". На самом деле стринги не очень большие, не превышают 300Кб. Поэтому заполнение думаю не очень поможет. Код: 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. затем по тексту каждого блока проходит замена: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 17:10 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
Сотников На самом деле стринги не очень большие, не превышают 300Кб Поэтому заполнение думаю не очень поможет. В некоторых случаях скорость возрастет раз в 10-20, не больше... Ну и знчения Код: plaintext Код: plaintext Можно еще попробовать не replace'ом пользоваться, а отдельно в новую строку копировать, хотя вот это скорее всего не будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 17:28 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
Локшин Марк Сотников На самом деле стринги не очень большие, не превышают 300Кб Поэтому заполнение думаю не очень поможет. В некоторых случаях скорость возрастет раз в 10-20, не больше... Ну и знчения Код: plaintext Код: plaintext Да... действительно... исправлю... спасибо Я все таки решил пересмотреть способ реализации и направиться к XML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 18:09 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
СотниковЯ все таки решил пересмотреть способ реализации и направиться к XML Думаю, с точки зрения perfromance, это не спасёт отца русской демократии, то бишь тормозить будет точно так же. Или пиши DLLку на С, или PBNI компонент... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 18:54 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
global subroutine gf_replace_global (ref string l_text, string l_str_old, string l_str_new) также лутше передавать параметры по референс или ридонли, а вообсще у нас реализованно все в виде длл на с++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2005, 21:23 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
Black Savage1. Написание Parser -ов на PowerBuilder есть полнейшая глупость. Не веришь мне? Спроси у ASCRUS, он писал парсер в свое время... Кстати, в этом случае основное время (подозреваю, гораздо более 90%) тратится на исполнение функций pos и replace, код которых и так написан на C и не интерпретируется. В этом случае нужно оптимизировать уже сами алгоритмы поиска, используя что-нибудь вроде алгоритма Кнута-Морриса-Пратта или Бойера-Мура , поскольку производится поиск по названиям шаблонов, то дополнительные структуры для них можно рассчитывать предварительно. Я думаю, раз в 10 ускорить можно. Кстати, если пользоваться replace'ом, то вставляя в середину содержимое шаблона, вы все время таскаете оставшийся справа кусок текста, а 500 раз скопировать 150 КБ текста, все-таки не так быстро. Так что сбор в новую строку, я все-таки думаю, тоже ускорит процесс. Да, а использование XML - это хорошо, но только если это действительно необходимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2005, 12:24 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
Кстати, если необходимо разбирать какие-то огромные(по кол-ву объектов) объемы данных, то из ПБ самое то делать с внешними dll. В свое время пришлось делать с применением ПБ приложение по расчету матриц(решение задачи о "коммивояжере"). Матрицы хранились в БД. Размер матрицы 10000х10000, итого размер 400Мб. Так вот расскажу о реализации: Код на ПБ - работал больше суток Код на С подключенный через ДЛЛ - 15 минут Код на АСМе встроенном в С подключенный через ДЛЛ - 2 мин Ясен пень, что алгоритм во всех случаях одинаков... Делайте выводы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2005, 23:28 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
iLLerКод на ПБ - работал больше суток Код на С подключенный через ДЛЛ - 15 минут Код на АСМе встроенном в С подключенный через ДЛЛ - 2 мин Ясен пень, что алгоритм во всех случаях одинаков... Делайте выводы. Ну так никто и не говорил, что эхотаг хорош в качестве числомолотилки . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 10:51 |
|
||
|
Работа со строками (поиск/замена)
|
|||
|---|---|---|---|
|
#18+
iLLerКстати, если необходимо разбирать какие-то огромные(по кол-ву объектов) объемы данных, то из ПБ самое то делать с внешними dll. В свое время пришлось делать с применением ПБ приложение по расчету матриц(решение задачи о "коммивояжере"). Матрицы хранились в БД. Размер матрицы 10000х10000, итого размер 400Мб. Так вот расскажу о реализации: Код на ПБ - работал больше суток Код на С подключенный через ДЛЛ - 15 минут Код на АСМе встроенном в С подключенный через ДЛЛ - 2 мин Ясен пень, что алгоритм во всех случаях одинаков... Делайте выводы. А вот где найти dll "Код на С подключенный через ДЛЛ" или "Код на АСМе встроенном в С подключенный через ДЛЛ" для простого замены одного текстового фрагмента на другой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 17:05 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=32893000&tid=1338561]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 169ms |

| 0 / 0 |
