|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.09.2009, 19:23 | #1 |
Пользователь
Регистрация: 13.06.2009
Сообщений: 61
|
Работа с ListView
Есть поиск и добавление файлов в ListView.
Есть поиск в каждом файле, в каждой строке, слова через Edit1.Text Как через POS осуществить поиск по строкам в файлах в ListView? Код:
Код:
Последний раз редактировалось мимо; 08.09.2009 в 13:07. |
08.09.2009, 06:42 | #2 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
В добавленном коде содержится попытка искать "слово" совсем не в файле, а в строке пункта ListWiew (Caption). Может быть Caption и содержат строки с именами файлов, но все же это не сами файлы, которые, как минимум, для поиска в них, надо открывать.
В приведенном коде есть функция FindSubStrInFile - это, видимо, и есть та функция, которая открывает файл и ищет "слово" в нем, возвращая результат поиска. Может быть в реализации этой функции и находятся ответы на ваши вопросы. Что касается конкретного вопроса " как через POS искать слово" (теплится надежда, что это текстовый файл), то это очень просто: загружаете файл (имя которого находится в Caption ListView) в TStringList и применяете Pos. Pos('слово', SL.Text) (SL в этом примере переменная типа TStringList). Pos возвращает либо 0 (не найдено), либо число >0 (найдено в такой-то позиции). Но Pos ВСЕГДА вернет (если вернет) первое вхождение "слово" в тексте и если в этом тексте есть еще такое же слово, то оно не будет найдено. Для расширенного поиска используется функция PosEx (модуль StrUtils). |
08.09.2009, 13:06 | #3 |
Пользователь
Регистрация: 13.06.2009
Сообщений: 61
|
да. спасибо, уже разобрался. тут поиск происходит только в названиях файлов, находящихся в ListView.
а тогда как записать, если заданное нами слово не найдено в файле, то файл удаляется из ListView? (т.е. if ReplaceResult=0, then ...) Последний раз редактировалось мимо; 08.09.2009 в 13:14. |
08.09.2009, 23:11 | #4 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
Удалить то item с именем файла не сложно:
ListView1.Items.Delete(<индекс>), где <индекс> - число в диапазоне 0..ListView.Items.Count-1 Но в безусловном цикле, который приведен в коде этого делать нельзя. Засада кроется в том, что после первого же удаления количество items станет меньше чем было задано при входе в цикл (ListView.Items.Count). Рано или поздно в цикле произойдет ошибка обращения по некорректному адресу. Ситуацию может исправить цикл с предусловием. Код:
|
09.09.2009, 18:12 | #5 |
Пользователь
Регистрация: 13.06.2009
Сообщений: 61
|
странно, если брать index, то выдает ошибку - Assignment to FOR-Loop variable 'Index'
а если вместо index поставить SelIndex, то при нахождении искомого слова - все нормально, а если не находит, то вылетает с ошибкой - accessviolation. либо оставить только if ReplaceResult = 0 и при не нахождении искомого слово очищается весь ListView ( |
09.09.2009, 22:11 | #6 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
Ошибка "Assignment to FOR-Loop variable 'Index'" понятно от чего происходит: вы почему то решили оставить цикл For и вставить в него цикл while, хотя ясно было сказано, что for в этом случае не годится и его надо заменить на while.
А в других ошибках (они, скорее, логические) надо разбираться, нужны исходные тексты проекта, иначе не понятно что в них происходит. Впрочем, и эти ошибки тоже, вероятно, происходят от того что оставлен цикл for. Последний раз редактировалось Скандербег; 09.09.2009 в 22:18. |
12.02.2011, 16:54 | #7 |
Форумчанин
Регистрация: 29.12.2010
Сообщений: 186
|
Попробуй этот вариант
Код:
Код:
Последний раз редактировалось casio23; 12.02.2011 в 16:57. Причина: / |
12.02.2011, 17:05 | #8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
не нужно некропостить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как перетащить элемент ListView в другой ListView? | Paul Hindenburg | Компоненты Delphi | 5 | 26.01.2013 11:35 |
Listview | Neymexa | Общие вопросы .NET | 0 | 13.05.2009 21:19 |
ListView | Лубышев | Общие вопросы Delphi | 6 | 18.07.2008 16:04 |
ListView | Terran | Общие вопросы Delphi | 2 | 05.04.2008 23:15 |
ListView | Garacio | Компоненты Delphi | 1 | 17.12.2006 15:30 |