Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Фильтр в SearchForFiles или как его реализовать?
dkscorpДата: Суббота, 10 Апреля 2010, 18:22 | Сообщение # 1
Новый участник
Группа: Пользователи
Сообщений: 29
Репутация: 0
Награды: 0
Статус: Offline
Встала задача занести в список файлы из директории по маске,
так SearchForFiles("<SrcDir>\","") и SearchForFiles("<SrcDir>\",".html")
работает, но мне необходимо дать маску по имени, т.е. например: man*.html
и тут команда SearchForFiles("<SrcDir>\","man*.html") бессильна, как добиться результата ?
 
YURIYДата: Суббота, 10 Апреля 2010, 18:38 | Сообщение # 2
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (dkscorp)
но мне необходимо дать маску по имени, т.е. например: man*.html

Использовать

Quote (dkscorp)
SearchForFiles("<SrcDir>\",".html")

и дальше из списка с результатом отбирать с помощью строковых функций требуемые файлы.

P. S. Во втором параметре SearchForFiles точку можно не указывать.



Вечная память Андрею Сергееву!
 
dkscorpДата: Суббота, 10 Апреля 2010, 22:31 | Сообщение # 3
Новый участник
Группа: Пользователи
Сообщений: 29
Репутация: 0
Награды: 0
Статус: Offline
Попробовал, чо-то не пашет, по идее все вроде верно, выводит 0 если нет буквосочетания man, но удаляет как-то странно, может есть еще какие-нибудь пути,
скачал ListBoxDemo.mbd, пока не разобрался в нем, и там он грузит массив с тексовых файлов (хотя тут тоже в массиве все)

Code
stringname$ = 'man'
ListBoxGetItems("ListBox","Items$,NumItems$,#,Count")
For i=1 To Count
Item$=GetArrayItem(Items$,#,i)
RetVal=POS(stringname$, item$)
If (RetVal=0) Then
numitem$=GetArrayItem(NumItems$,#,i)
numitem=VAL(numitem$)
ListBoxDeleteItem("ListBox","numitem")
End
Next i
ListBoxSelectItem("ListBox","1")
 
YURIYДата: Суббота, 10 Апреля 2010, 23:27 | Сообщение # 4
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Предлагаю сделать всё иначе.

Код с пояснениями:

Code
** Что должно быть в имени файла:
search$='man'
** Ищем
SearchForFiles("C:\test","txt")
** Перебираем весь список с результатом
** CBK_NumInList - возвращает количество строк во внутреннем списке MMB,
** он же - <List> (см. справку) - в нём все результаты поиска
For i=1 To CBK_NumInList
   ** В переменную загружаем i-элемент списка
   LoadText("path$","<List>i")
   ** Извлекаем из пути имя файла
   name$=ExtractName(path$)
   ** Выполняем поиск в имени файла
   pos=POS(search$,name$)
   ** Если нашли, искомый файл - path$
   If (pos<>0) Then
     Message("Файл, удовлетворяющий условию: ","path$")
   End
Next i

И вот ещё что. Впредь прошу заключать свой код в теги code.

Добавлено (10 Апрель 2010, 23:27)
---------------------------------------------
А теперь объясняю, почему Ваш код неверный, как и подход к решению задачи.

Вы загрузили в ListBox все пути к файлам. Далее смотрите каждый и если он не подходит - Вы его удаляете из списка.

Ошибка в том, что при удалении в списке первого элемента, нумерация остальных ведь смещается и второй станет первым, третий вторым и так далее.

Условие поиска написано правильно, но удаление работает неверно. Вы продолжаете убирать элементы с их прежней нумерацией, потому они и удаляются непонятно как :)



Вечная память Андрею Сергееву!
 
dkscorpДата: Понедельник, 12 Апреля 2010, 22:22 | Сообщение # 5
Новый участник
Группа: Пользователи
Сообщений: 29
Репутация: 0
Награды: 0
Статус: Offline
Спасибки, YURIY, я тут правда сам пробовал поизвращаться слить в другой список и т.д., пришел к выводу - твое решение быстрее и проще. Еще раз Big сенкью :-), особенно за пояснения, и вот кстати такого синтаксиса в мануалах я не видел - LoadText("path$","<List>i")
 
YURIYДата: Понедельник, 12 Апреля 2010, 22:42 | Сообщение # 6
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Не за что :)

Quote (dkscorp)
и вот кстати такого синтаксиса в мануалах я не видел - LoadText("path$","<List>i")

Но он там есть.

Открываем справку, в поиск вбиваем LoadText. Заходим в первый найденный результат и видим:

Code
LoadText("переменная$","<List>Число")

На той же странице даны все необходимые пояснения :)



Вечная память Андрею Сергееву!
 
  • Страница 1 из 1
  • 1
Поиск: