Предсортировка при For Each (vb6)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
65536
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 31.01.2006 (Вт) 21:52

Предсортировка при For Each (vb6)

Сообщение 65536 » 31.01.2006 (Вт) 22:13

Здравствуйте
эхотаг = vb6.0
Задача: просмотреть по таймеру каталог и выполнить
разные действия с файлами с разными именами,
причём с одними ,которые на "q-" начинается - безусловно, а с теми, что на "d-" - c окошками, вопросами и условиями для ручной работы.

проблема в том, что d стоит алфавитно перед q и при таком подходе:

For Each fName In fc
Set ff = fso.GetFile(fName)
fN = UCase(CStr(ff.Name))
Select Case UCase(CStr(Left$(fN, 2)))
Case "Q-" ->надо безусловно решать
Case "D-" ->показывать окошки для юзверя
_сразу_ идёт переход на case d ,генерится окно и останавливается ход машины.
Можно ли перед case пересортировать это дело (непонятно даже, какое дело, в fc или массив или коллекция) или может быть надо другой подход?

спасибо

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.02.2006 (Ср) 4:11

Опять fso...
Кому, нафиг, надо fso? Оно что, возможности дополнительные даёт? Не понимаю...

Что такое fName? fc? ff?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 01.02.2006 (Ср) 4:22

Люди статей Гайдара начитались на сайте. Как лозунг - "FSO - Тяжёлая арртерелия VB" может не привлекать? :D
Лучше думать чем жевать.

65536
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 31.01.2006 (Вт) 21:52

Сообщение 65536 » 01.02.2006 (Ср) 19:14

GSerg писал(а):Опять fso...
Кому, нафиг, надо fso? Оно что, возможности дополнительные даёт? Не понимаю...

я писал - васик6, через фсо удобно, про допвозможности не знаю.
а чем неправильно через фсо, может через dir рульнее?
поясните плз, если не жалко

GSerg писал(а):Что такое fName? fc? ff?

ну я ведь образно писал, через getFolder смотрим каталог и для каждого члена fc - коллекции (по мсдн) перебираем чеё членов (fName). а Set ff = fso.GetFile(fName) даже не знаю, как объяснить - типа канонически написано.
проблема - повторюсь, что fname строятся по алфавиту, а надо бы их перестроить перед перебором. всего то. если можно - скажите как , если нет - скажите как надо, если есть способ без фсо - подскажите плз, буду только рад.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2006 (Чт) 5:12

65536 писал(а):через фсо удобно

Таскать за собой scripting runtime тоже удобно?

65536 писал(а):
GSerg писал(а):Что такое fName? fc? ff?

ну я ведь образно писал

А не надо образно писать.
Я имел в виду типы переменных. Или переменные не объявлены?
В угадайку играть? Допустим, что fc - это files. Тогда почему делается жестокий изврат с Set ff = fso.GetFile(fName)? Если fc - это files, то fName - это уже сразу то, что возвращает GetFile. Следовательно, fc - это не files. Да?
Типы переменных в студию.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 02.02.2006 (Чт) 9:52

Таскать за собой scripting runtime тоже удобно?
Окстись! fso присутствует даже в комплекте 98х. Я наоборот, всегда исключал ее из дистрибутива, потому что при ее перезаписи требовалось перезапустить комп.
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.02.2006 (Чт) 10:57

Мне, к примеру, в FSO не нравятся глюки, которыми не можешь управлять. Я уж лучше по старинке.
Lasciate ogni speranza, voi ch'entrate.

65536
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 31.01.2006 (Вт) 21:52

Сообщение 65536 » 02.02.2006 (Чт) 12:44

GSerg писал(а):Я имел в виду типы переменных. Или переменные не объявлены?
В угадайку играть? Допустим, что fc - это files. Тогда почему делается жестокий изврат с Set ff = fso.GetFile(fName)? Если fc - это files, то fName - это уже сразу то, что возвращает GetFile. Следовательно, fc - это не files. Да?
Типы переменных в студию.

насчёт изврата тут ты прав, я переделал

On Error GoTo errZapros
Dim fName
Dim ff As File
Dim ListFileName As String
Dim strFileName As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(strInPath)
Set fc = f.Files

For Each fn In fc
Set ff = fso.GetFile(fName)
fName = LCase(CStr(ff.Name))
Select Case UCase(CStr(Left$(fName, 2)))

Case "q-"
Case "d-"
Case "!-"
но не работает


2)попутно вопрос,
как при добавлении строчки в листбокс
давать фокус на последнюю строку, типа постоянно скроллить вниз

fName = Dir(strInPath + "*.ddd", vbNormal)
While Len(fName) <> 0
frmFilez.ListIn.AddItem (fName)
fName = Dir() '
DoEvents
Wend

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 02.02.2006 (Чт) 13:07

GSerg писал(а):
65536 писал(а):через фсо удобно

Таскать за собой scripting runtime тоже удобно?

:) Начиная с 98 SE - WSH есть во всех виндах. :)
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 02.02.2006 (Чт) 13:12

65536 писал(а):
GSerg писал(а):Я имел в виду типы переменных. Или переменные не объявлены?
В угадайку играть? Допустим, что fc - это files. Тогда почему делается жестокий изврат с Set ff = fso.GetFile(fName)? Если fc - это files, то fName - это уже сразу то, что возвращает GetFile. Следовательно, fc - это не files. Да?
Типы переменных в студию.

насчёт изврата тут ты прав, я переделал
................

2)попутно вопрос,
как при добавлении строчки в листбокс
давать фокус на последнюю строку, типа постоянно скроллить вниз


Примерно так
Код: Выделить всё

fName = Dir(strInPath + "*.ddd", vbNormal)
While Len(fName) <> 0
    frmFilez.ListIn.AddItem (fName)
   frmFilez.ListIn.ListIndex=frmFilez.ListIn.NewIndex
  '----------------------------------------------------------
            fName = Dir() '
    DoEvents
Wend
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2006 (Чт) 14:51

65536 писал(а):насчёт изврата тут ты прав, я переделал

Неа.
Не вижу переделки.

Код: Выделить всё
dim fso as FileSystemObject, ff as file, fc as files, arr() as string

set fso = new FileSystemObject
set fc=fso.getfolder(strInPath).files
redim arr(1 to fc.count) 'я не знаю, отразится ли изменение количества файлов в процессе перечисления на этом коде или там snapshot.
for each ff in fc
  arr(i)=ff.name
next
set fso=nothing

Сортируй arr по своим правилам.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

    TopList