Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сортировка файлов директории по алфавиту
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sonycman
Имеется SAM7 c какой-либо файловой системой. Возможно, с поддержкой длинных имён.
Есть директория с файлами.
Хочется открывать файлы из этой директории строго в алфавитном порядке, но как это сделать?

Можно-ли создать сортированный список файлов, используя минимум оперативной памяти?
Stanislav
Цитата(sonycman @ Mar 6 2007, 01:45) *
Имеется SAM7 c какой-либо файловой системой. Возможно, с поддержкой длинных имён.
Есть директория с файлами.
Хочется открывать файлы из этой директории строго в алфавитном порядке, но как это сделать?

Можно-ли создать сортированный список файлов, используя минимум оперативной памяти?
"Пузырьковое всплытие". Накладных расходов памяти (кроме собственно списка) нет. Для дальнейшей экономии ОЗУ можно составлять и сортировать список не имён файлов, а их порядковых номеров в директории.
Если элементов немного - метод работает не слишком тормознО. smile.gif
anpilog
К слову.
Метод "пузыря" в данном случае можно и без списка реализовать - больше займет времени.
KRS
Если минимум памяти и список не хранить то перебором.
1 находим самый первый по алфавиту файл (перебором всего каталога)
2 находим самый первый но больше предыдущего ....
накладных расходов по памяти - хранить предыдущий открытый и текущий минимальный
но конечно скорость маленькая будет каждый раз перебирать.
sonycman
Цитата(Stanislav @ Mar 6 2007, 04:15) *
"Пузырьковое всплытие". Накладных расходов памяти (кроме собственно списка) нет. Для дальнейшей экономии ОЗУ можно составлять и сортировать список не имён файлов, а их порядковых номеров в директории.
Если элементов немного - метод работает не слишком тормознО. smile.gif

А что это за метод "пузырькового всплытия"?
Замена имён файлов их порядковыми номерами интересна, но как тогда открывать файл, имея только его номер? Перебором всех файлов, находящихся до него?
Цитата(KRS @ Mar 6 2007, 13:17) *
Если минимум памяти и список не хранить то перебором.
1 находим самый первый по алфавиту файл (перебором всего каталога)
2 находим самый первый но больше предыдущего ....
накладных расходов по памяти - хранить предыдущий открытый и текущий минимальный
но конечно скорость маленькая будет каждый раз перебирать.

Тоже пришёл к подобному решению. Скорость, конечно, будет не ахти...

В принципе, список можно сохранить в отдельном файле, тогда туда влезут все даже самые длинные имена и кол-во файлов не будет иметь значения.
А потом работать уже в соответствии с этим файлом...
anpilog
Цитата(sonycman @ Mar 6 2007, 12:01) *
В принципе, список можно сохранить в отдельном файле, тогда туда влезут все даже самые длинные имена и кол-во файлов не будет иметь значения.
А потом работать уже в соответствии с этим файлом...


А кто будет синхронизировать то что находится в файле и реально в директории?
Это тоже надо учесть.
sonycman
Цитата(anpilog @ Mar 6 2007, 14:50) *
А кто будет синхронизировать то что находится в файле и реально в директории?
Это тоже надо учесть.

Да, понятно, что это надо учитывать.
Спасибо smile.gif
Stanislav
Цитата(sonycman @ Mar 6 2007, 13:01) *
А что это за метод "пузырькового всплытия"?..
Ну, это, пожалуй, самый тупой метод сортировки. smile.gif Занимает минимум памяти как программ, так и данных.
Суть в следующем: берутся первый и второй элемент списка. Сравниваются. Если второй меньше - меняются местами. Затем второй и третий, и т.д. Операция повторяется, пока не прекратятся перестановки.
Кол-во операций перестановки в худшем случае - (N-1)!, где N - число элементов списка, ! - знак факториала. smile.gif
Если кол-во файлов в директории больше десятка, лучше поискать другой способ. Например, который уже предложили: выбираете мин. элемент, далее следующий из оставшихся, и т.д.
Для ускорения операции перестановки, в памяти лучше хранить порядковые номера (тэги, или индексы) элементов списка, и переставлять именно их.
sonycman
Цитата(Stanislav @ Mar 7 2007, 01:21) *
Если кол-во файлов в директории больше десятка, лучше поискать другой способ. Например, который уже предложили: выбираете мин. элемент, далее следующий из оставшихся, и т.д.
Для ускорения операции перестановки, в памяти лучше хранить порядковые номера (тэги, или индексы) элементов списка, и переставлять именно их.

Файлов будет, конечно-же, больше 10. Вернее всего - сотни.
Всё понятно. Спасибо.

Подводя итоги:
Если мало памяти - придётся тратить много времени на сортировку.
Если ограничиться сортированным списком индексов - тогда ещё и при открытии нужного файла придётся перебирать директорию до нужного индекса.
Если хочется открывать быстрее - тогда надо иметь список с полными именами - по запросу создавать файл списка и работать через него.

Короче, гиморрой ещё тот...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.