Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

TOpenDialog сортировка файлов

62 views
Skip to first unread message

Edward Luzhnih

unread,
Dec 5, 2008, 4:11:53 AM12/5/08
to
Hi All!

Еще вопросик. Как сделать сортировку в диалоговом окне открытия файлов? В
Ворде такая вещь есть..а вот ни с тандартном сабже ни в rx-совом ничего
таокого не нашел :(

With Best Regards

Sergey Kuchumov

unread,
Dec 5, 2008, 4:36:16 PM12/5/08
to
Hello, Edward !

EL> Еще вопросик. Как сделать сортировку в диалоговом окне открытия
EL> файлов? В Ворде такая вещь есть..а вот ни с тандартном сабже ни в
EL> rx-совом ничего таокого не нашел :(

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

если хочется файлы отсортировать в открытом диалоге можно так:

procedure TForm1.OpenDialogSortfiles;
var counter, look:integer; temp:Tstrings;
begin
if OpenDialog1.Files.Count<>1 then begin
temp := TStringList.Create;

for counter:=0 to OpenDialog1.Files.Count-1 do
temp.Append(LowerCase(OpenDialog1.Files.Strings[counter]));

for counter:=0 to temp.Count-1 do


for look:=counter+1 to temp.Count-1 do
if temp[look]<temp[counter] then begin
OpenDialog1.Files.Exchange(look, counter);
temp.Exchange(look,counter);
end;


temp.Free;
end; {if}
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialogSortfiles;
opendialog1.Execute;
end;

--
Best regards,
Sergey Kuchumov

Sergei Andreev

unread,
Dec 8, 2008, 6:54:54 AM12/8/08
to
EL> Еще вопросик. Как сделать сортировку в диалоговом окне открытия
EL> файлов? В Ворде такая вещь есть..а вот ни с тандартном сабже ни в
EL> rx-совом ничего таокого не нашел :(
SK> Hе совсем понял, что нужно.
SK> Если кнопку сортировки в диалоге - можно выбрать режим вывода таблица и
потом
SK> щелкай по нужному полю (имя тип ...)и все сортируется, по моему и в
ворде так же.
SK> если хочется файлы отсортировать в открытом диалоге можно так:
SK> procedure TForm1.OpenDialogSortfiles;
SK> var counter, look:integer; temp:Tstrings;
SK> begin
SK> if OpenDialog1.Files.Count<>1 then begin
SK> temp := TStringList.Create;
SK> for counter:=0 to OpenDialog1.Files.Count-1 do
SK> temp.Append(LowerCase(OpenDialog1.Files.Strings[counter]));
1) Hе LowerCase, а AnsiLowerCase.
2) Hи одна из них нафиг не нужна
temp.AddStrings(OpenDialog1.Files);
и для сравнения использовать AnsiCompareText.
3) OP хочет отсортировать все файлы, а не
только выделенные в данный момент времени.
4) Твой первый совет - более адекватное решение,
чем последовавший за ним кусок "кода".


Edward Luzhnih

unread,
Dec 8, 2008, 7:30:51 AM12/8/08
to
Hi Sergey!

Спасибо! То что искал :)

Best Regards

Sergey Bychkov

unread,
Dec 8, 2008, 8:21:36 AM12/8/08
to
Привет, Sergey!


... В ответ на письмо от 06 декабря 2008 от Sergey Kuchumov к
oit...@mgw.npp.zp.ua сообщаем:

EL>> Еще вопросик. Как сделать сортировку в диалоговом окне открытия
EL>> файлов? В Ворде такая вещь есть..а вот ни с тандартном сабже ни в
EL>> rx-совом ничего таокого не нашел :(

SK> Hе совсем понял, что нужно.
SK> Если кнопку сортировки в диалоге - можно выбрать режим вывода таблица
SK> и потом щелкай по нужному полю (имя тип ...)и все сортируется, по
SK> моему и в ворде так же.

SK> если хочется файлы отсортировать в открытом диалоге можно так:

Ужоз. А заставить TStringList сортироваться самостоятельно, или, на крайний
случай, вызвать ему метод Sort среди настоящих Delphi-программистов уже
немодно? Гораздо проще написать свою версию пузырьковой сортировки? А вы
пробовали исполнить этот код на директории с парой десятков тысяч файлов?

SK> procedure TForm1.OpenDialogSortfiles;
SK> var counter, look:integer; temp:Tstrings;
SK> begin
SK> if OpenDialog1.Files.Count<>1 then begin
SK> temp := TStringList.Create;

SK> for counter:=0 to OpenDialog1.Files.Count-1 do
SK> temp.Append(LowerCase(OpenDialog1.Files.Strings[counter]));

SK> for counter:=0 to temp.Count-1 do


SK> for look:=counter+1 to temp.Count-1 do
SK> if temp[look]<temp[counter] then begin
SK> OpenDialog1.Files.Exchange(look, counter);
SK> temp.Exchange(look,counter);
SK> end;


SK> temp.Free;
SK> end; {if}
SK> end;


SK> procedure TForm1.Button1Click(Sender: TObject);
SK> begin
SK> OpenDialogSortfiles;
SK> opendialog1.Execute;
SK> end;

До встречи, Sergey!
Sergey (serge_bychkov[zzz]mail333.com) ICQ# 21014758

Sergey Kuchumov

unread,
Dec 8, 2008, 1:07:02 PM12/8/08
to
Hello, Sergey !

Once (Monday December 08 2008) at 16:21 someone named Sergey Bychkov wrote to
Sergey Kuchumov. So, look here:

SB> Ужоз. А заставить TStringList сортироваться самостоятельно, или, на
SB> крайний случай, вызвать ему метод Sort среди настоящих
SB> Delphi-программистов уже немодно? Гораздо проще написать свою версию
SB> пузырьковой сортировки? А вы пробовали исполнить этот код на
SB> директории с парой десятков тысяч файлов?
А у вас таких случаев довольно много? Что то не пойму, как на вопрос человеку
дать ответ, так никого. А "покритиковать" целый отряд "настоящих дельфи
программистов" использующих модные методы программирования. Вам же никто не
мешает примерчик можете привести сортировки методом, ну хоть пузырька.

Sergey Kuchumov

unread,
Dec 8, 2008, 12:57:36 PM12/8/08
to
Hello, Sergei !

Once (Monday December 08 2008) at 14:54 someone named Sergei Andreev wrote to


Sergey Kuchumov. So, look here:

Я конечно не претендую на истину или суперадекватность, но приведенный пример
(хоть я не автор, но я проверил) полностью рабочий.

SK>> 1) Hе
SA> LowerCase, а AnsiLowerCase.
А вот когда делаешь так то сортировка рускоязычных файлов/каталогов не
работает, т.к. списочек не в 1251, а в 866, так что именно LowerCase/

SA> 2) Hи одна из них нафиг не нужна
SA> temp.AddStrings(OpenDialog1.Files); и для сравнения использовать
SA> AnsiCompareText.
см.выше

SA> 3) OP хочет отсортировать все файлы, а не только
SA> выделенные в данный момент времени. 4) Твой первый совет - более
SA> адекватное решение, чем последовавший за ним кусок "кода".

может не стоит так горячиться, человек задал вопрос, я ответил, в меру своего
понимания проблемы. Знаешь как лучше - молодец, нервничать только не надо.

Andrey Zhukov

unread,
Dec 8, 2008, 5:55:18 PM12/8/08
to
Hello Sergey!

08 Dec 08 16:21, Sergey Bychkov wrote to Sergey Kuchumov:

SB> крайний случай, вызвать ему метод Sort среди настоящих
SB> Delphi-программистов уже немодно? Гораздо проще написать свою версию
SB> пузырьковой сортировки? А вы пробовали исполнить этот код на
SB> директории с парой десятков тысяч файлов?

Hу, к слову говоря, вот это-то как-раз никакого значения не имеет - шансы, что
юзер при помощи TOpenDialog найдет среди десятка тысяч файлов нужный все равно
принебрежимо малы :) Хотя это конечно не повод изобретать велосипед...

Bye!
Andrey

Sergey Bychkov

unread,
Dec 9, 2008, 8:32:47 AM12/9/08
to
Привет, Sergey!


... В ответ на письмо от 08 декабря 2008 от Sergey Kuchumov к Sergey Bychkov
сообщаем:

SB>> Ужоз. А заставить TStringList сортироваться самостоятельно, или,

SB>> на крайний случай, вызвать ему метод Sort среди настоящих


SB>> Delphi-программистов уже немодно? Гораздо проще написать свою

SB>> версию пузырьковой сортировки? А вы пробовали исполнить этот код
SB>> на директории с парой десятков тысяч файлов?

SK> А у вас таких случаев довольно много? Что то не пойму, как на вопрос
SK> человеку дать ответ, так никого.

А это вопрос как бы и не для этой эхи.

SK> А "покритиковать" целый отряд "настоящих дельфи программистов"
SK> использующих модные методы программирования.

SK> Вам же никто не мешает примерчик можете привести сортировки методом,
SK> ну хоть пузырька.

Как можно заметить, модно как раз оказывается изобрести велосипед, и предложить
самое неэффективное из существующих решений.

Sergey Bychkov

unread,
Dec 9, 2008, 8:35:27 AM12/9/08
to
Привет, Andrey!


... В ответ на письмо от 09 декабря 2008 от Andrey Zhukov к Sergey Bychkov
сообщаем:

SB>> крайний случай, вызвать ему метод Sort среди настоящих
SB>> Delphi-программистов уже немодно? Гораздо проще написать свою

SB>> версию пузырьковой сортировки? А вы пробовали исполнить этот код
SB>> на директории с парой десятков тысяч файлов?

AZ> Hу, к слову говоря, вот это-то как-раз никакого значения не имеет -
AZ> шансы, что юзер при помощи TOpenDialog найдет среди десятка тысяч
AZ> файлов нужный все равно принебрежимо малы :) Хотя это конечно не повод
AZ> изобретать велосипед...

Пожалуй соглашусь - программа такого уровня пусть лучше сразу зависнет на
пузырьковой сортировке. Пользователь быстрее поймёт, что ему подсунули что-то
не то.

До встречи, Andrey!

Sergey Kuchumov

unread,
Dec 9, 2008, 12:15:50 PM12/9/08
to
Hello, Sergey !

Once (Tuesday December 09 2008) at 16:32 someone named Sergey Bychkov wrote to


Sergey Kuchumov. So, look here:

SB> Как можно заметить, модно как раз оказывается изобрести велосипед, и
SB> предложить самое неэффективное из существующих решений.

Предложите эффективное.

Edward Luzhnih

unread,
Dec 9, 2008, 6:22:46 PM12/9/08
to
Hi Andrey!

А по поводу десятков тысяч файлов..столько думаю не будет..однако на данный
момент около 800 их уже есть и к-во будет расти

Best Regards

Sergey Kuchumov

unread,
Dec 9, 2008, 11:56:02 PM12/9/08
to
Hello, Edward !

Once (Wednesday December 10 2008) at 02:22 someone named Edward Luzhnih wrote
to Andrey Zhukov. So, look here:

EL> А по поводу десятков тысяч файлов..столько думаю не будет..однако
EL> на
EL> данный момент около 800 их уже есть и к-во будет расти

А по поводу десятков тысяч файлов, я думаю что и штатные виндовые средства
будут притормаживать. Большого смысла хранить все в одной куче я не вижу. Для
этого и придуманы каталоги (папки) не так ли? Кроме того можно попробовать
написать свой OpenDialog(к вопросу о велосипедах) 8)

Lexa Shirshin

unread,
Dec 8, 2008, 10:24:04 PM12/8/08
to
Привет, Andrey.


> Hу, к слову говоря, вот это-то как-раз никакого значения не имеет -
> шансы,
> что юзер при помощи TOpenDialog найдет среди десятка тысяч файлов нужный
> все равно принебрежимо малы :) Хотя это конечно не повод изобретать
> велосипед...

К тому же, есть такая бяка.
Если выбрать много файлов, например для обработки, длина строки из сцепленных
вместе имен файлов не может превышать 2 Гб. Отсюда получаетя забавный фокус,
если больше 2 Гб, всё работает, ошибок нет, но некоторые файлы не попадают в
обработку.


Edward Luzhnih

unread,
Dec 9, 2008, 11:50:34 PM12/9/08
to
Hi Serg!

Hарод! Hе ссорьтесь! Человек действительно попытался помочь. Я в общем то
посмотрел в каком направлении на основе ваших сообщений копать и хочу сказать
спасибо всем кто проявил участие. Дальше уже сам сделаю что нужно :)

Best Regards

Andrey Zhukov

unread,
Dec 10, 2008, 2:45:54 PM12/10/08
to
Hello Lexa!

09 Dec 08 06:24, Lexa Shirshin wrote to Andrey Zhukov:

LS> Если выбрать много файлов, например для обработки, длина строки из
LS> сцепленных вместе имен файлов не может превышать 2 Гб. Отсюда
LS> получаетя забавный фокус, если больше 2 Гб, всё работает, ошибок нет,
LS> но некоторые файлы не попадают в обработку.

Ээээ... Ты когда-нибудь видел программу, в которой _список_ файлов для
обработки занимает 2 гига, и она при этом работает? ;)

Bye!
Andrey

P.S. Hе, я конечно достаточно легко могу представить себе, скажем, здоровенную
"электронную библиотеку" - но формировать такой список в памяти, а не в
таблицах БД, например, мягко говоря странно.

Edward Luzhnih

unread,
Dec 10, 2008, 3:31:17 PM12/10/08
to
Hi Sergey!

Я провтыкал. приведенный тобой пример расчитан на выбранные файлы..а не на все
что выводится :)

Best Regards

Sergei Andreev

unread,
Dec 11, 2008, 4:31:08 AM12/11/08
to
EL> Я провтыкал. приведенный тобой пример расчитан
EL> на выбранные файлы..а не на все что выводится :)
... о чём я писал SK ещё 8-го числа.
Кстати, я так и не понял, чем тебе не подходит сортировка
визуальными средствами самого диалога: выбираешь
вид "Таблица" и клацаешь по заголовку нужной колонки?


Sergey Bychkov

unread,
Dec 12, 2008, 1:04:45 AM12/12/08
to
Привет, Sergey!


... В ответ на письмо от 09 декабря 2008 от Sergey Kuchumov к Sergey Bychkov
сообщаем:

SB>> Как можно заметить, модно как раз оказывается изобрести
SB>> велосипед, и предложить самое неэффективное из существующих
SB>> решений.

SK> Предложите эффективное.

0. Читать книжки, доки, маны. Они - рулез.
1. +RU.DELPHI.CHAINIK

До встречи, Sergey!

Lexa Shirshin

unread,
Dec 11, 2008, 2:08:04 PM12/11/08
to
Привет, Andrey.

> Ээээ... Ты когда-нибудь видел программу, в которой _список_ файлов для
> обработки занимает 2 гига, и она при этом работает? ;)

Файлы - это запись голоса, каждый 0.2-3 минуты. Каждый каталог содержит до
хрена файлов.
Предоставлена возможность для обработки выбирать в TOpenDialog по маске файлы.
Было замечено, что некоторые файлы не обрабатываются. В процессе выяснения
стало понятно, что есть ограничение в 2Гб на длину строки, содержащую
последовательно добавленные имена файлов.
Поборол проверкой, FindFirst и т.д.

Edward Luzhnih

unread,
Dec 12, 2008, 6:00:05 AM12/12/08
to
Hi Sergey!

SA> Кстати, я так и не понял, чем тебе не подходит сортировка
SA> визуальными средствами самого диалога: выбираешь
SA> вид "Таблица" и клацаешь по заголовку нужной колонки?

Дело в том что я не смог найти где сделать что бы сортировка по умолчанию
была в виде таблицы сразу. По умолчанию там "список" выбран. Может где то
пропустил ..но перерыл свойства как Rx-ового TFileNameEdit так и TOpenDialog,
но переключения программно вида отображаения файлов не нашел как и сортировки.
В итоге нашел компоненты Raize и на основании исходников тамошней формы
похожей на TOpenDialog - сделал свою с нужными мне параметрами. Правда в
Word-e есть еще лучше вариант. Там можно выбрать любой вид отображения файлов
и там же есть пункт сортировки по имени, типу, размеру,дате. Это было бы вобще
иделально. Hо хотя бы так как сделал уже приемлемо.

Best Regards

Andrey Zhukov

unread,
Dec 12, 2008, 6:15:18 AM12/12/08
to
Hello Lexa!

11 Dec 08 22:08, Lexa Shirshin wrote to Andrey Zhukov:

>> Ээээ... Ты когда-нибудь видел программу, в которой _список_ файлов
>> для обработки занимает 2 гига, и она при этом работает? ;)

LS> Файлы - это запись голоса, каждый 0.2-3 минуты. Каждый каталог
LS> содержит до хрена файлов. Предоставлена возможность для обработки

ОК, понял. Главное, никогда не ставь это прогу на FAT32 раздел...

Bye!
Andrey

Max Rusov

unread,
Dec 14, 2008, 12:05:38 PM12/14/08
to
Thu Dec 11 2008 22:08, Lexa Shirshin wrote to Andrey Zhukov:

LS> Предоставлена возможность для обработки выбирать в TOpenDialog по маске
LS> файлы. Было замечено, что некоторые файлы не обрабатываются. В процессе
LS> выяснения стало понятно, что есть ограничение в 2Гб на длину строки,
LS> содержащую последовательно добавленные имена файлов.

Вообще-то 2Гб - это ограничение не на длину строки, а ограничение на размер
всего адресного пространства для w32 приложений (без 4gt tuning). _Задолго_
до достижения строкой хотя бы половины от этого значения ты получишь OOM.

Всяческих благ,
Максим Русов

Vlad Kiselev

unread,
Feb 6, 2009, 5:47:02 PM2/6/09
to
Hello, Lexa !

Once (Thursday December 11 2008) at 22:08 someone named Lexa Shirshin wrote to
Andrey Zhukov. So, look here:

LS> Файлы - это запись голоса, каждый 0.2-3 минуты. Каждый каталог
LS> содержит до хрена файлов. Предоставлена возможность для обработки
LS> выбирать в TOpenDialog по маске файлы. Было замечено, что некоторые
LS> файлы не обрабатываются. В процессе выяснения стало понятно, что есть
LS> ограничение в 2Гб на длину строки, содержащую последовательно
LS> добавленные имена файлов. Поборол проверкой, FindFirst и т.д.
Hа мой взгляд, самое время задуматься о создании базы данных...


--
Best regards,
Vlad Kiselev

0 new messages