как получить отсортированный список файлов?

Предыдущая тема Следующая тема Перейти вниз

как получить отсортированный список файлов?

Сообщение  Eric-S в Ср Ноя 04, 2009 12:13 am

Привет!

Вот такая задачка.
Мне нужно получить список файлов, чтобы он был отсортирован, и желательно натуральным способом.

Код:

dim fname as string
fname = dir("text/*.txt", &h21 )
do while len(fname)
print "file: " & fname
fname = dir()
loop

Такой способ даёт мне список файлов. Но он, не то что натуральным, он вообще не отсортирован!

Может кто знает библиотеку для натуральной сортировки? Или ещё какой-нибудь способ.

На крайняк я конечно могу сделать и
Код:

shell "dir /b /on text\*.txt > dirlist.tmp"

Или даже заюзать php. У него это очень просто получаеться.
Но вот именно, что хочеться способ, наиболее простой для freebasic.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: как получить отсортированный список файлов?

Сообщение  electrik в Ср Ноя 04, 2009 12:46 pm

странно, у меня вроде, было отсортированно. мы как-то с тобой говорили про это. может конечно у меня на винте так все оккуратно лежит.
да нет, я помню что кидал файлы в папку после всяких дефрагментаций. хорошо что ты отловил это. а то я собирался писать прогу, на основе dir, чтоб она на флешку скидывала файло в правильном порядке.
погляди в мануале C Standard Library Functions
там есть функция
qsort(base as any ptr, num as size_t, width as size_t, compare as function(elem1 as any ptr, elem2 as any ptr) as integer)
или посмотри описание на русском:
http://all-cpp.narod.ru/353.html
мы вчера с тобой говорили про алгоритмы сортировки, так вот твой предложенный метод со списками, будет не самый быстрый. quick sort, считается самым быстрым алгоритмом сортировки. есть его модификации, но они как правило для отдельных случаев. я тут просто читал про это дело, всякие математики и т.д., по сей день придумывают алгоритмы, и пока круче quick sort'а не придумали.
если тебя интересует реализация этого алгоритма, можно почитать:
http://window.edu.ru/window_catalog/files/r45158/24.pdf
http://algolist.manual.ru/sort/faq/q8.php
http://sort.ucoz.ru/index/0-4
http://www.codenet.ru/progr/alg/sort_search/qui.php
пойду погляжу в исходниках, как написана функция dir

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: как получить отсортированный список файлов?

Сообщение  electrik в Ср Ноя 04, 2009 1:10 pm

посмотрел, там не каких сортировок нет. мой совет, если вы делаете не кросс платформенную программу, используйте функции операционки. так или иначе, встроенные функции в fb, используют эти же функции, только там еще куча проверок. в функции dir, столько всего понаписанно, жуть. используйте под windows функции типа:
FindFirstFile
FindNextFile
под dos, прямое обращение- (сложно), прерывания dos.
под лinux, тоже функции ос.
если не планируется глобальный поиск по всему винтчестеру, можно использовать dir.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: как получить отсортированный список файлов?

Сообщение  Eric-S в Ср Ноя 04, 2009 2:37 pm

Ладно. Спасибо за ответы.

Я тут подумал и решил, в документации описать этот баг, как специальную фичу.


Электрик, то что я говорил про сортировку и списки... Я знаю, что это не самый быстрый алгоритм.
Но мы разговаривали про конкретный случай. Когда входное число слов неизвестно.
И с учётом того, что слова должны быть уникальными, т.е. каждое новое должно проверяться на присутствие в списке.
И в этом случае задача изменяеться.
Нужно быстро проверить, есть ли такое слово или нет. А если есть, то это слово, нужно быстро добавить к остальным.
Учитывая, что слов будет очень много, массивы однозначно не подходят. Лучше всего список.
А чтобы быстро проверять, есть ли слово или нет, список должен быть отсортирован. И нужное слово, сразу должно вставляться на соответствующую позицию.


При этом можно сделать несколько оптимизаций. Например статический массив на, скажем, 1024 слова, который будет типа кэша.

И таблицу с указателями, на некоторые узлы в списке, чтобы не нужно было бы пробегаться по всему списку, а сразуу найти нужный отрезок, с помощью двоичного деления.
Или даже завессти список, на каждые уникальные, первые две буквы.

Таким образом можно ускорить добавление слова. А сортировка будет лишь вспомогательным инструментом.
Но Электрик.... Вообще-то это не по сабжу!
И меня интересовал именно способ сортировки имён файлов.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: как получить отсортированный список файлов?

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения