Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизЗагрузка файла из списка ComboBox Найти похожие ветки
← →
Кос (2012-03-02 10:05) [0]
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.
← →
AV © (2012-03-02 10:21) [1]
> выбросить из списка ComboBox ( . и ..)
это директории
faAnyFile xor faDirectory
> как их отсортировать по дате
любым способом сортировки
> хочу при выборе файла из списка загружать его в StringGrid
S:=ComboBox1.Text;
List.LoadFromFile(S);
← →
CRLF (2012-03-02 10:39) [2]
> если ручками прописать конкретный файл, то код работает.
> Не получается реализовать с изменяющимся файлом S
С путями что-то напутал 100%
← →
Кос (2012-03-02 10:46) [3]
S:=ComboBox1.Text;
List.LoadFromFile(S);
Почему, обращение при этом идёт к каталогу где находится проект. Соответственно закрывается ошибкой файл не найден.
← →
AV © (2012-03-02 11:00) [4]если не указанj полное имя, файл ищется в папке по умолчанию(каталогу где находится проект) и папках по путям в %Path%
← →
Кос (2012-03-02 11:36) [5]А как тогда реализовать ?
← →
Кос (2012-03-02 11:45) [6]
List.LoadFromFile("C:\1\"+S);
Вопрос снят, спасибо
← →
CRLF (2012-03-02 11:46) [7]можешь сохранять с путями, можешь сначала установить текущий каталог, затем загружать так, как ты сейчас загружаешь
← →
Кос (2012-03-02 11:51) [8]А сортировку как по дате применить не подскажите ?
procedure TForm1.FormCreate(Sender: TObject);
var
List:Tstringlist;
SR: TSearchRec;
FindRes: Integer;
begin
List:=Tstringlist.Create;
ComboBox1.Clear;
FindRes := FindFirst("C:\контрольные файлы\*.*", faAnyFile, SR);
while FindRes = 0 do
begin
if (SR.Name <> ".") and (SR.Name <> "..") then
ComboBox1.Items.Add(SR.Name);
FindRes := FindNext(SR);
end;
FindClose(SR);
List.Sort;
ComboBox1.Items:=List.Text;
List.Free;
вот накидал на скорую руку
← →
CRLF (2012-03-02 12:03) [9]во-первых, почитай про try finally end.
во-вторых, с сортировкой по дате так "в лоб" не получится. нужно хранить пары "дата-имя", сортировать по дате, а затем в список запихивать имена файлов.
← →
CRLF (2012-03-02 12:05) [10]как вариант: создай список, который будет хранить даты, при нахождении очередного файла определяй, на какую позицию нужно вставить файл, чтобы список оставался отсортированным, вставляй дату файла в этот список, а имя файла в то, что у тебя фигурирует как List.
← →
AV © (2012-03-02 12:40) [11]или аля как-то так, т.к. дата уже есть - это же не просто строки, это файлы
procedure AddIt(s: string);
begin
if FileExist() и прочая лабудень then
for i:= ComboBox1.Items.Count - 1 downto 0 do
begin
if FileAge(s) > FileAge(ComboBox1.Items[i]) then
begin
ComboBox1.Items.Insert(i, s); Exit;
end;
end;
ComboBox1.Items.Add(s);
← →
Anatoly Podgoretsky © (2012-03-02 12:46) [12]
> А сортировку как по дате применить не подскажите ?
У Кнута целый, толстый том посвящен сортировке, а ты хочешь в несколько строк.
← →
CRLF (2012-03-02 13:09) [13]
> AV © (02.03.12 12:40) [11]
1. Параметризуешь -- так уж параметризуй по-людски... А то учишь новичка половину запараметризовать, а вторую половину в глобальные переменные распихать :-(
2. В TSearchRec.FindData лежат дата-время создания, модицикации и последнего доступа. Игнорировать эту уже найденную информацию и гонять в цикле FileAge и FileExist крайне глупо.
← →
CRLF (2012-03-02 13:25) [14]3. Да ещё и строку без const передаёшь :-(
← →
AV © (2012-03-02 14:16) [15]
> CRLF
не учу, просто идея.
да и идея - так себе :), да.
Каждый раз дергать файлы - на больших списках долго будет
Согласен что
Надо либо items.objects[] заюзать
либо второй список, подходящий.
> 1. Параметризуешь -- так уж параметризуй по-людски...
прямо тут писал, на скопированном коде свыше ( :) )
> 2. В TSearchRec.FindData лежат дата-время создания, модицикации
> и последнего доступа. Игнорировать эту уже найденную информацию
> и гонять в цикле FileAge и FileExist крайне глупо.
+
> 3. Да ещё и строку без const передаёшь :-(
а оно по умолчанию не так разве?
← →
CRLF (2012-03-02 14:46) [16]
> а оно по умолчанию не так разве?
По умолчанию строка копируется и передаётся копия, над которой можно измываться. Со спецификатором const передаётся адрес строки и изменять её нельзя. Второй вариант в разы быстрее.
← →
AV © (2012-03-02 14:57) [17]
> Второй вариант в разы быстрее.
хм, да, есть такое дело.
Но, копейки.. на 10 000 000 вызовов пустой процедуры с const и без выигрыш составил 150 тиков.
всего-то...
← →
CRLF (2012-03-02 15:17) [18]а передавал пустую строку? для сравнения производительности передавай непустую строку и выполняй над нею хоть какие-то действия. А то делфовый оптимизатор мало ли что наоптимизирует.
← →
CRLF (2012-03-02 15:46) [19]Проверил с функцией, возвращающей первый символ строки, на строках 255 символов, оптимизация отключена, миллиард циклов. 25654мс против 6808мс. Почти четыре раза. При включенной оптимизации 24596 против 1951.
← →
Anatoly Podgoretsky © (2012-03-02 15:50) [20]> CRLF (02.03.2012 14:46:16) [16]
В обеих случаях передается указатель строки или прямо, или его копия.
← →
AV © (2012-03-02 16:10) [21]
> а передавал пустую строку?
не, "йцу"
> В обеих случаях передается указатель строки или прямо, или
> его копия.
похоже, так.
Скопировать указатель - как раз, наверное, и будет это потраченное-выигрышное время.
← →
Anatoly Podgoretsky © (2012-03-02 16:27) [22]Легко можешь проверить, увеличить длину строк как минимум в 10 раз и повтори измерение
← →
Loginov Dmitry © (2012-03-03 00:29) [23]
> А сортировку как по дате применить не подскажите ?
Можно строки в списке хранить в виде <дата>=<имя>, например:List.Add(FormatDateTime("yyyy-mm-dd-hh-nn-ss-zzz", FileTime) + "=" + SR.Name)
тогда для сортировки достаточно List.Sort, а в комбобокс в цикле скопировать List.ValueFromIndex[i]
← →
Кос (2012-03-28 12:48) [24]
> Можно строки в списке хранить в виде <дата>=<имя>, например:
>
> 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
← →
Плохиш © (2012-03-28 12:55) [25]
> [Error] Unit2.pas(47): "(" expected but ")" found
>
Тебе перевести что ли?
> List2.Add(FormatDateTime("yyyy-mm-dd-hh-nn-ss-zzz", FileTime) + "=" + SR.Name);
Этот маразм на каком языке программирования поддерживатся?
← →
Кос (2012-03-28 12:59) [26]нет переводить не надо и так понятно.
Вопрос резонный сам впервые с таким сталкиваюсь
← →
Anatoly Podgoretsky © (2012-03-28 13:10) [27]> Кос (28.03.2012 12:48:24) [24]
Неверный формат вызова, тебе же сказали что ожидается ) а у тебя что -
структура filetime
← →
Anatoly Podgoretsky © (2012-03-28 13:13) [28]
> Вопрос резонный сам впервые с таким сталкиваюсь
F1 - FILETIME по MS SDK и Add по Delphi
← →
Кос (2012-03-28 14:13) [29]А как правильно тогда будет описать ?
И вообще структура правильная ? Или такой нет в delphi ?
← →
Anatoly Podgoretsky © (2012-03-28 15:11) [30]FormatDateTime описан в справке
← →
имя (2012-03-28 19:21) [31]Удалено модератором
← →
имя (2012-03-28 19:21) [32]Удалено модератором
← →
имя (2012-03-28 19:22) [33]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.092 c