| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > проблема с функцией замены Replace, нужна помощь |
| Автор: PhantomM 9.3.2012, 17:20 | ||||
| Приветствую мастера! проблемы с функцией замены Replace, задача сравнить два списка handle окон и выявить новые (запущенное между заполнениями списков) Я решил действовать через функцию Replace заменяя все совпадающие значения на "" при проверке кода всё работает нормально до момента передачи полученных значений из переменной в текстовое поле. я предположил что функция Replace записывает результат как массив и передаёт txt только первое значение, но все мои попытки работать с переменной как с массивом тоже ничего не дали..... И ещё почему то функция Replace не заменяет всё, если запустить сравнение без запуска программ она всёравно находит новые окна.... Мне очень важна эта функция так как в ближайшем будущем надо будет научить программу сравнивать на выявления и записи лишних строк из двух огромных файлов до 50 мб. Я тут написал упрощённый код посмотрите пожалуйста в чём может быть ошибка? А вот пример с моими комментариями http://zalil.ru/32830586 Спасибо, Максим. Вот код
Модуль:
|
| Автор: PhantomM 9.3.2012, 20:04 | ||||
я побоялся что массивы займут много памяти, но наверно вернусь к этому варианту, правда как то ни разу не делал поиск в массивах, ну да разберусь....
Конечно разумнее, но я думал что форумы существуют для того что бы помочь друг другу или указать на ошибки, я конечно почитаю справку ещё раз, но поидее если человек спрашивает значит он в тупике, и наверно читал и справки и статьи... Но всёравно ОГРОМНОЕ СПАСИБО, вы единственный кто хоть что то написал. С уважением Максим |
| Автор: Akina 10.3.2012, 20:04 |
И, прочитав, что Replace возвращает строку, всё-таки начинает делать напрочь не соответствующие этому предположения? а вот не верю... |
| Автор: PhantomM 11.3.2012, 17:57 | ||
А что мне остаётся думать? Я знаю что она должна передавать строку.. Но почему передаётся только первое значение строки???? Тоесть при отладке функция имеет конечное значение, например "Корова кошка верблюд велосепед" в текстовом поле получаем "Корова" и всё, хоть убейся!!! И никто объяснить в чём дело не может... Ни на одном форуме.... Если по логике, такие результаты могут быть только в массивах... Я это и "ПРЕДПОЛОЖИЛ" Я же не могу всего знать, думал может чего упустил. Но никто не знает, видимо и мне не судьба. Спасибо за ответ, с уважением Максим. |
| Автор: Akina 11.3.2012, 18:03 | ||
А символов перевода строки там, в строковой переменной, не завалялось? покажите debug.print того стринга, который передаёте в функцию, и результата её работы... |
| Автор: PhantomM 11.3.2012, 18:23 | ||
Я тоже об этом подумал, поэтому в примере попробовал передавать значения в текст бокс с мультилайн я думаю что при символах перевода значения просто напечатались бы на новой сороке. debug.print я так понимаю это скрины процесса, если я правильно понял сейчас сделаю. |
| Автор: PhantomM 11.3.2012, 19:04 |
| Вот скрины: 1 - это значение переменной (текстовой) listsorte полученые из функции "listsorte= Replace(listsorte, List1.List(sh), "h")" Я тут что бы мне было нагляднее вместо "" поставил "h" что бы было видно замены. p\s присвоение происходит прямо во время цикла...... http://s1.ipicture.ru/ 2- переедаем значение сразу в текст значение текстового поля, вот тут мы и видим только одну "h" хотя в это же время istsorte содержит все свои значения как и раньше: http://s1.ipicture.ru/ 3 - результат выполнения самой программы: http://s1.ipicture.ru/ |
| Автор: Akina 12.3.2012, 10:07 |
Надо использовать поиск по встроенной справке и читать эту самую справку, а не изобретать собственное понимание. |
| Автор: PhantomM 12.3.2012, 17:49 |
| Нет у меня родной справки vb, и честно сказать никогда небыло нужды в debug.print, но всегда приятно узнать что то новое Прошу прошения, исправил скрин ниже: |
| Автор: Akina 13.3.2012, 07:38 | ||
http://msdn.microsoft.com/en-us/library/aa338032(v=VS.60).aspx?ppud=4 Многочисленные преобразования, которые выполняются при размещении поста, убивают его ценность. Вместо debug.print всей переменной покажите ASC() первых 16 символов во всех трёх случаях:
|
| Автор: PhantomM 13.3.2012, 17:12 |
| коды символов до обработки функцией 77 83 67 84 70 73 77 69 32 85 73 68 101 102 97 117 результат замены на символ h- 104 118 108 99 0 104 0 104 0 118 108 99 0 104 0 104 0 значение текстового поля 118 108 99 Ну причину благодаря вам мы вроде нашли, если не ошибаюсь "0" это конец строки, но всётаки этот символ вставляет функция Replace, он появляется исключительно после обработки переменной... Но почему она так делает? |
| Автор: Akina 13.3.2012, 17:16 |
Вот этого дела - побольше... чтобы было захвачено минимум 2 строки целиком. |
| Автор: PhantomM 14.3.2012, 09:32 | ||
77 83 67 84 70 73 77 69 32 85 73 68 101 102 97 117 108 116 32 73 77 69 77 83 67 84 70 73 77 69 32 85 73 68 101 102 97 117 108 116 32 73 77 69 193 224 235 224 225 238 235 234 224 80 104 97 110 116 111 109 77 57 57 57 64 115 105 112 110 101 Но вроде ничего странного не заметил. |
| Автор: Akina 14.3.2012, 11:00 | ||
Тваюмать! А то что у тебя одна хрень - это листбокс, а вторая текстбокс - это ничего? CHR(0) - это разделитель элементов листбокса. И они имеют место быть там изначально, Replace тут никаким боком, не надо на функцию гнать. Так что либо замени текстбокс на другой листбокс, либо перед запихиванием результата в текстбокс замени CHR(0) на VBNewLine. |
| Автор: PhantomM 14.3.2012, 18:38 | ||
блин, ну надо же было так тупануть.... |