![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка расширений файлов [D6, XP]
Volf_555 © (2005-12-12 13:20:00)Суть в следующем:
Необходимо из списка файлов выделить все их расширения и произвести обработку их. То есть - допустим, есть следующие расширения, полученные со списка файлов:
*.rar
*.rar
*.exe
*.thm
*.rar
*.jpg
*.zip
*.zip
*.jpg
*.thm
*.zip
*.zip
Необходимо, чтобы в конечном результате вышло следующее:
*.rar
*.exe
*.thm
*.jpg
*.zip
Построить список расширений трудности не составляет.
А вот обработка - да...
Мой обработчик, который обрабатывает список неверно:
var
w,w1:TStringList;
e,r:Integer;
co:Integer;
cur:String;
x1:Integer;
x2:Integer;
...
begin
...
x1:=0;
x2:=w.Count-1;
for e:=x1 to x2 do
begin
Application.ProcessMessages;
cur:=w.Strings[e];
for r:=x1 to x2 do
begin
if w.Strings[r]=cur then
begin
memo1.Lines.Add('Всего было: '+IntToStr(x2));
memo1.Lines.Add('x1='+IntToStr(x1));
memo1.Lines.Add(IntToStr(r)+':'+w.Strings[r]+' deleted');
w.Delete(r);
x2:=x2-1;
x1:=x1+1;
memo1.Lines.Add('Всего осталось: '+IntToStr(x2));
memo1.Lines.Add('x1='+IntToStr(x1));
break;
end;
end;
co:=co+1;
w1.Add(cur);
listbox1.Items.Assign(w1);
memo1.Lines.Add('');
memo1.Lines.Add(IntToStr(co));
memo1.Lines.Add(w.Text);
//memo1.Lines.Add('w.String['+IntToStr(e)+']:= '+cur);
end;
Игорь Шевченко (2005-12-13 13:05:00) [1]
> А почитать полезно, по-крайней мере, как пример изложения.
Ну это в любом случае полезно.
Leonid Troyanovsky (2005-12-13 13:02:00) [2]
> Игорь Шевченко © (13.12.05 11:11) [12]
> > x2:=x2-1;
> > x1:=x1+1;
> А в чем криминал и несоответствие спецификации языка Паскаль
> в данном коде ?
Криминала нет, но, за такую "экономию" из рогатки убивать надо.
А почитать полезно, по-крайней мере, как пример изложения.
--
Regards, LVT.
Хинт (2005-12-13 11:59:00) [3]Прошу прощения. Еще не проснулся =) Запрет стоит на изменение переменной "I"...
Игорь Шевченко (2005-12-13 11:52:00) [4]Хинт © (13.12.05 11:46) [16]
TP у меня под рукой, разумеется, нету, а то, что граничные условия цикла for вычисляются один раз перед выполнением цикла документировано в Object Pascal Language Guide :)
Независимо от гайки "Оптимизация".
В противном случае циклы от 1 до Length(строка) работали бы ужасающе медленно.
Хинт (2005-12-13 11:46:00) [5]2Игорь Шевченко
Не знал, что так можно делать. Просто запомнил, что в TP в таком случае выдавался Error и запустить программу было невозможно.
Игорь Шевченко (2005-12-13 11:37:00) [6]Johnmen © (13.12.05 11:20) [13]
Чего хотел, понятно: выводить сообщение.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
I, J, K: Integer;
begin
J := 0;
K := 5;
for I:=J to K do begin
J := J + 1;
K := K - 1;
Memo1.Lines.Add (Format('Iteration %d, J=%d, K=%d', [I, J, K]));
end;
end;
end.
Результат:
Iteration 0, J=1, K=4
Iteration 1, J=2, K=3
Iteration 2, J=3, K=2
Iteration 3, J=4, K=1
Iteration 4, J=5, K=0
Iteration 5, J=6, K=-1
В чем проблема, в упор не вижу
Хинт (2005-12-13 11:21:00) [7]2Игорь Шевченко
Наверное имеется ввиду изменение значения переменных, используемых в заголовке цикла, в его теле
Johnmen (2005-12-13 11:20:00) [8]>Игорь Шевченко © (13.12.05 11:11) [12]
Не понятно, чего хотел, учитывая for r:=x1 to x2 do
:)
Игорь Шевченко (2005-12-13 11:11:00) [9]Digitman © (12.12.05 15:45) [7]
Leonid Troyanovsky © (12.12.05 19:22) [11]
> x2:=x2-1;
> x1:=x1+1;
А в чем криминал и несоответствие спецификации языка Паскаль в данном коде ?
Leonid Troyanovsky (2005-12-12 19:22:00) [10]
> Volf_555 (12.12.05 19:15) [10]
> > Digitman © (12.12.05 15:45) [7]
> > автор элементарного Паскаля не знает. а вы ему тут про
> Просто не знал про существование таких свойств.
Про существование свойств многие грешат (не страшно).
Важно > Digitman © (12.12.05 15:45) [7]
(Hint: Object Pascal Language Guide: Object Pascal grammar &etc.)
--
Regards, LVT.
Volf_555 (2005-12-12 19:15:00) [11]
> Digitman © (12.12.05 15:45) [7]
> автор элементарного Паскаля не знает. а вы ему тут про св-
> ва TStringList долдоните)
В смысле - что я не знаю? Как изменять свойства компонента? Это всем известно. Просто не знал про существование таких свойств.
Leonid Troyanovsky (2005-12-12 18:57:00) [12]
> Volf_555 (12.12.05 18:44) [8]
> Игорь Шевченкo, большое вам спасибо - это то, что мне надо
> было
Честно говоря, ты должен еще одно "спасибо", to
Digitman © (12.12.05 15:45) [7]
Иначе будущее, IMHO, обречено.
--
Regards, LVT.
Volf_555 (2005-12-12 18:44:00) [13]Игорь Шевченкo, большое вам спасибо - это то, что мне надо было
Digitman (2005-12-12 15:45:00) [14]автор элементарного Паскаля не знает. а вы ему тут про св-ва TStringList долдоните)
> Volf_555 (12.12.05 13:20)
это что за галиматья
x2:=x2-1;
x1:=x1+1;
?
объяснить в состоянии ?
в соответствии со спецификацией языка Паскаль ?
Tor (2005-12-12 15:41:00) [15]Так это у StringList есть кажись св-во которое разрешает или запрещает повторение. Или преред добавлением в результирующий список, прогони этот список на наличие такой строки.
Игорь Шевченко (2005-12-12 13:38:00) [16]Digitman © (12.12.05 13:30) [1]
"профессионалам отдельная просьба - быть снисходительными"
Digitman (2005-12-12 13:33:00) [17]и при чем здесь "расширения" чего-то там ?
так и скажи : есть некий список строковых значений, где не исключены повторы, необходимо получить список уникальных строковых значений из этого исходного списка
umbra (2005-12-12 13:33:00) [18]
while w.IndexOf(cur) <> -1 do
begin
{........................................}
w.Delete(w.IndexOf(cur));
{................................}
end;
w.add(cur);
Digitman (2005-12-12 13:30:00) [19]"собачий синдром" : всё понимаю , а сказать не могу ...
Игорь Шевченко (2005-12-12 13:30:00) [20]StringList.Sorted := true
StringList.Duplicates := dupIgnore
StringList.AddStrings(w.Strings)