Вопрос по сортировке массива

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

Вопрос по сортировке массива

Сообщение Avatar » 20.06.2003 (Пт) 15:07

Господа, я плохо ориентируюсь в VB и уже целый день потратил на эту ерунду, буду очень благодарен за любую помощь :))
Всего-то надо чтобы макрос под Excel XP
забирал имена файлов из указанной директории и подавал их в правильном порядке дальше, для записи в List1
Я попытался сделать это с помощью Dir$ примерно следующим образом:

Код: Выделить всё
.....
ChDir$ ("[i]MyPath[/i]")
sFile = Dir$("[i]MyPath[/i]\*.xls")
'Ну и далее банальный цикл:
While sFile <> ""
If sFile = "[i]Myfile.xls[/i]" Then GoTo skipmyself
'Далее следуют действия по вырезанию из файлов и вставке в [i]Myfile.xls (я их здесь опускаю)
[/i]
:skipmyself
sFile = Dir$
Wend


Как тут же выяснилось к моему огорчению в отличие от системной команды Dir /o или DIR|SORT в VB она не сортирует файлы
Заглянул в HELP по VBA - там нашел только следующее по DIR:
"Tip Because file names are retrieved in no particular order, you may want to store returned file names in an array, and then sort the array"
Ладно, создал массив, поместил туда sFile - все отлично.. Но битых 2 часа искал по хелпу какую-нибудь специальную функцию или метод по сортировке массива - ничего!!! :-((
сравнивать их построчно или в записывать в List1 и там сортировать а потом снова считывать - это не самый оптимальный метод... или все-таки нет такой функции в VB?

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 20.06.2003 (Пт) 15:15

Функции такой нет вообще, на сколько мне известно, ни в одном языке.
А в чём, собсно, трабла? Ты же всё равно в List1 пишешь? Так задай ему св-во Sorted = True и радуйся.

Avatar
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 20.06.2003 (Пт) 14:28

Сообщение Avatar » 20.06.2003 (Пт) 15:28

Спасибо, жаль если нет... Зачем же мелкомягкие в хелпе тогда дают такие странные советы?
А в Perl есть ф-ция sort и в C есть qsort :))

Это не прокатит, т.к. мне надо сортировать файлы до записи в List1
Я же вырезаю из файлов только определенные поля

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 20.06.2003 (Пт) 15:39

Avatar писал(а):Спасибо, жаль если нет... Зачем же мелкомягкие в хелпе тогда дают такие странные советы?

Почему же странные? Нормальный совет. Это же совет, а не готовое решение.

Avatar писал(а):А в Perl есть ф-ция sort и в C есть qsort :))

Некорректное сравнение. Это же не встроенная функция языка? Не знаю как в Perl, а в C++ это решается подключением соответствующей библиотеки. Точно так же это происходит и в VB. Напиши функцию и обращайся к ней.

В VB элементом массива может быть что угодно. А как сравнивать объекты? или ещё хуже объект и не объект?

Avatar писал(а):Это не прокатит, т.к. мне надо сортировать файлы до записи в List1
Я же вырезаю из файлов только определенные поля

Типа по номеру, а номер вырезается? Если лень писать сортировку, то самое простое засунуть в лист и считать из него.

Avatar
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 20.06.2003 (Пт) 14:28

Сообщение Avatar » 20.06.2003 (Пт) 15:43

Ладно, похоже придется засунуть названия файлов в лист..
не самое изящное решение

Avatar
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 20.06.2003 (Пт) 14:28

Сообщение Avatar » 20.06.2003 (Пт) 15:53

skiperski писал(а):В VB элементом массива может быть что угодно. А как сравнивать объекты? или ещё хуже объект и не объект?

В данном случае это все же текстовые переменные - имена файлов
skiperski писал(а):Типа по номеру, а номер вырезается? Если лень писать сортировку, то самое простое засунуть в лист и считать из него.

По какому номеру? я же имел ввиду надо отсортировать по алфавиту имена файлов

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 20.06.2003 (Пт) 16:25

Avatar писал(а):В данном случае это все же текстовые переменные - имена файлов

В данном - да, а в общем - что-угодно. Это к вопросу о встроенной функции. Вопрос: как она должна быть организована? Ответ: никак. Потому как тип эл-ов может быть любым, размерность массива может быть любой. Кроме того, алгоритмы сортировки очень сильно различаются в зависимости от данных.

Avatar писал(а):По какому номеру? я же имел ввиду надо отсортировать по алфавиту имена файлов

Это я догадку построил для чего это понадобилось.
Типа файлы
Код: Выделить всё
02-xxx.txt
01-zzz.txt
03-yyy.txt


, а в списке
Код: Выделить всё
zzz.txt
xxx.txt
yyy.txt


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

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

Сейчас этот форум просматривают: Mail.ru [бот], Yandex-бот и гости: 69

    TopList