как получить отсортированный список файлов?
Участников: 2
FreeBasic :: Программирование :: Общее
Страница 1 из 1
как получить отсортированный список файлов?
Привет!
Вот такая задачка.
Мне нужно получить список файлов, чтобы он был отсортирован, и желательно натуральным способом.
Такой способ даёт мне список файлов. Но он, не то что натуральным, он вообще не отсортирован!
Может кто знает библиотеку для натуральной сортировки? Или ещё какой-нибудь способ.
На крайняк я конечно могу сделать и
Или даже заюзать php. У него это очень просто получаеться.
Но вот именно, что хочеться способ, наиболее простой для freebasic.
Вот такая задачка.
Мне нужно получить список файлов, чтобы он был отсортирован, и желательно натуральным способом.
- Код:
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.
Re: как получить отсортированный список файлов?
странно, у меня вроде, было отсортированно. мы как-то с тобой говорили про это. может конечно у меня на винте так все оккуратно лежит.
да нет, я помню что кидал файлы в папку после всяких дефрагментаций. хорошо что ты отловил это. а то я собирался писать прогу, на основе 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
да нет, я помню что кидал файлы в папку после всяких дефрагментаций. хорошо что ты отловил это. а то я собирался писать прогу, на основе 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
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: как получить отсортированный список файлов?
посмотрел, там не каких сортировок нет. мой совет, если вы делаете не кросс платформенную программу, используйте функции операционки. так или иначе, встроенные функции в fb, используют эти же функции, только там еще куча проверок. в функции dir, столько всего понаписанно, жуть. используйте под windows функции типа:
FindFirstFile
FindNextFile
под dos, прямое обращение- (сложно), прерывания dos.
под лinux, тоже функции ос.
если не планируется глобальный поиск по всему винтчестеру, можно использовать dir.
FindFirstFile
FindNextFile
под dos, прямое обращение- (сложно), прерывания dos.
под лinux, тоже функции ос.
если не планируется глобальный поиск по всему винтчестеру, можно использовать dir.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: как получить отсортированный список файлов?
Ладно. Спасибо за ответы.
Я тут подумал и решил, в документации описать этот баг, как специальную фичу.
Электрик, то что я говорил про сортировку и списки... Я знаю, что это не самый быстрый алгоритм.
Но мы разговаривали про конкретный случай. Когда входное число слов неизвестно.
И с учётом того, что слова должны быть уникальными, т.е. каждое новое должно проверяться на присутствие в списке.
И в этом случае задача изменяеться.
Нужно быстро проверить, есть ли такое слово или нет. А если есть, то это слово, нужно быстро добавить к остальным.
Учитывая, что слов будет очень много, массивы однозначно не подходят. Лучше всего список.
А чтобы быстро проверять, есть ли слово или нет, список должен быть отсортирован. И нужное слово, сразу должно вставляться на соответствующую позицию.
При этом можно сделать несколько оптимизаций. Например статический массив на, скажем, 1024 слова, который будет типа кэша.
И таблицу с указателями, на некоторые узлы в списке, чтобы не нужно было бы пробегаться по всему списку, а сразуу найти нужный отрезок, с помощью двоичного деления.
Или даже завессти список, на каждые уникальные, первые две буквы.
Таким образом можно ускорить добавление слова. А сортировка будет лишь вспомогательным инструментом.
Но Электрик.... Вообще-то это не по сабжу!
И меня интересовал именно способ сортировки имён файлов.
Я тут подумал и решил, в документации описать этот баг, как специальную фичу.
Электрик, то что я говорил про сортировку и списки... Я знаю, что это не самый быстрый алгоритм.
Но мы разговаривали про конкретный случай. Когда входное число слов неизвестно.
И с учётом того, что слова должны быть уникальными, т.е. каждое новое должно проверяться на присутствие в списке.
И в этом случае задача изменяеться.
Нужно быстро проверить, есть ли такое слово или нет. А если есть, то это слово, нужно быстро добавить к остальным.
Учитывая, что слов будет очень много, массивы однозначно не подходят. Лучше всего список.
А чтобы быстро проверять, есть ли слово или нет, список должен быть отсортирован. И нужное слово, сразу должно вставляться на соответствующую позицию.
При этом можно сделать несколько оптимизаций. Например статический массив на, скажем, 1024 слова, который будет типа кэша.
И таблицу с указателями, на некоторые узлы в списке, чтобы не нужно было бы пробегаться по всему списку, а сразуу найти нужный отрезок, с помощью двоичного деления.
Или даже завессти список, на каждые уникальные, первые две буквы.
Таким образом можно ускорить добавление слова. А сортировка будет лишь вспомогательным инструментом.
Но Электрик.... Вообще-то это не по сабжу!
И меня интересовал именно способ сортировки имён файлов.
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|