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

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

Обработка расширений файлов [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)


Наверх

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