Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузка файла из списка ComboBox [D7]


Страницы:   1 2

Кос ©   (2012-03-02 10:05:00) 

procedure TForm1.FormCreate(Sender: TObject);
var
 SR: TSearchRec;
 FindRes: Integer;
begin
 ComboBox1.Clear;
 FindRes := FindFirst('C:\1\*.*', faAnyFile, SR);
 while FindRes = 0 do
 begin
   ComboBox1.Items.Add(SR.Name);
   FindRes := FindNext(SR);
 end;
 FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 List : TStringList;
 i,j : integer;
 S : String;
begin
 List := TStringList.Create;
 S:=ComboBox1.Items[5];
 List.LoadFromFile(S);
 StringGrid1.RowCount := List.Count;
 for i:=0 to StringGrid1.RowCount-1 do
   with StringGrid1.Rows[i] do
   begin
     Delimiter:=' ';  
     DelimitedText:=List[i];
 end;
end;


Собственно в выпадающем списке имена файлов находящихся в папке 1 диска С. Кстати как их отсортировать по дате и выбросить из списка ComboBox ( . и ..), которые при поиске записываются в Items ComboBox'a ? Далее хочу при выборе файла из списка загружать его в StringGrid, если ручками прописать конкретный файл, то код работает. Не получается реализовать с изменяющимся файлом S.


  (2012-03-28 19:22:00) [1]

Удалено модератором


  (2012-03-28 19:21:00) [2]

Удалено модератором


  (2012-03-28 19:21:00) [3]

Удалено модератором


Anatoly Podgoretsky   (2012-03-28 15:11:00) [4]

FormatDateTime описан в справке


Кос   (2012-03-28 14:13:00) [5]

А как правильно тогда будет описать ?
И вообще структура правильная  ? Или такой нет в delphi ?


Anatoly Podgoretsky   (2012-03-28 13:13:00) [6]


> Вопрос резонный сам впервые с таким сталкиваюсь

F1 -  FILETIME по MS SDK и Add по Delphi


Anatoly Podgoretsky   (2012-03-28 13:10:00) [7]

> Кос  (28.03.2012 12:48:24)  [24]

Неверный формат вызова, тебе же сказали что ожидается ) а у тебя что -
структура filetime


Кос   (2012-03-28 12:59:00) [8]

нет переводить не надо и так понятно.
Вопрос резонный сам впервые с таким сталкиваюсь


Плохиш   (2012-03-28 12:55:00) [9]


> [Error] Unit2.pas(47): '(' expected but ')' found
>

Тебе перевести что ли?

>    List2.Add(FormatDateTime('yyyy-mm-dd-hh-nn-ss-zzz', FileTime) + '=' + SR.Name);

Этот маразм на каком языке программирования поддерживатся?


Кос   (2012-03-28 12:48:00) [10]


> Можно строки в списке хранить в виде =, например:
>
> List.Add(FormatDateTime('yyyy-mm-dd-hh-nn-ss-zzz', FileTime)
> + '=' + SR.Name)
>
> тогда для сортировки достаточно List.Sort, а в комбобокс
> в цикле скопировать List.ValueFromIndex[i]
>
>


 List2 := TStringList.Create;
 FindRes := FindFirst('C:\êîíòðîëüíûå  ôàéëû\*.*', faAnyFile, SR);
 while FindRes = 0 do
 begin
   if (SR.Name '.') and (SR.Name '..') then
   List2.Add(FormatDateTime('yyyy-mm-dd-hh-nn-ss-zzz', FileTime) + '=' + SR.Name);
   List2.Sort;
   ComboBox1.Items.Add(List2.ValueFromIndex[i]);
   FindRes := FindNext(SR);
 end;
 FindClose(SR);
 List2.Free;

Ошибка в строке
List2.Add(FormatDateTime('yyyy-mm-dd-hh-nn-ss-zzz', FileTime) + '=' + SR.Name);

[Error] Unit2.pas(47): '(' expected but ')' found


Loginov Dmitry   (2012-03-03 00:29:00) [11]


> А сортировку как по дате применить не подскажите ?


Можно строки в списке хранить в виде <дата>=<имя>, например:
List.Add(FormatDateTime('yyyy-mm-dd-hh-nn-ss-zzz', FileTime) + '=' + SR.Name)

тогда для сортировки достаточно List.Sort, а в комбобокс в цикле скопировать List.ValueFromIndex[i]


Anatoly Podgoretsky   (2012-03-02 16:27:00) [12]

Легко можешь проверить, увеличить длину строк как минимум в 10 раз и повтори измерение


AV   (2012-03-02 16:10:00) [13]


> а передавал пустую строку?

не, "йцу"


> В обеих случаях передается указатель строки или прямо, или
> его копия.

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


Anatoly Podgoretsky   (2012-03-02 15:50:00) [14]

> CRLF  (02.03.2012 14:46:16)  [16]

В обеих случаях передается указатель строки или прямо, или его копия.


CRLF   (2012-03-02 15:46:00) [15]

Проверил с функцией, возвращающей первый символ строки, на строках 255 символов, оптимизация отключена, миллиард циклов. 25654мс против 6808мс. Почти четыре раза. При включенной оптимизации 24596 против 1951.


CRLF   (2012-03-02 15:17:00) [16]

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


AV   (2012-03-02 14:57:00) [17]


> Второй вариант в разы быстрее.

хм, да, есть такое дело.
Но, копейки.. на 10 000 000 вызовов пустой процедуры с const и без выигрыш составил 150 тиков.
всего-то...


CRLF   (2012-03-02 14:46:00) [18]


> а оно по умолчанию не так разве?
По умолчанию строка копируется и передаётся копия, над которой можно измываться. Со спецификатором const передаётся адрес строки и изменять её нельзя. Второй вариант в разы быстрее.


AV   (2012-03-02 14:16:00) [19]


> CRLF

не учу, просто идея.
да и идея - так себе :), да.
Каждый раз дергать файлы - на больших списках долго будет
Согласен что
Надо либо items.objects[] заюзать
либо второй список, подходящий.


> 1. Параметризуешь -- так уж параметризуй по-людски...

прямо тут писал, на скопированном коде свыше ( :) )


> 2. В TSearchRec.FindData лежат дата-время создания, модицикации
> и последнего доступа. Игнорировать эту уже найденную информацию
> и гонять в цикле FileAge и FileExist крайне глупо.

+


> 3. Да ещё и строку без const передаёшь :-(

а оно по умолчанию не так разве?


CRLF   (2012-03-02 13:25:00) [20]

3. Да ещё и строку без const передаёшь :-(


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо