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

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

Как вставить содержимое перeменной string в код программы? [D6, 2000]


pathfinder ©   (2005-11-08 20:11:00) 

Подскажите пожалуйста.


umbra   (2005-11-08 21:21:00) [1]


> не думал, что это так сложно:(


основная сложность - привести в соответствие отмеченные чекбоксы и номера полей в записях, а затем извлечь из строк эти поля, чтобы передать их в функцию Pos


pathfinder   (2005-11-08 21:17:00) [2]


> Zeqfreed ©   (08.11.05 21:09) [9]

Спасибо. Постараюсь..не думал, что это так сложно:(


Zeqfreed   (2005-11-08 21:09:00) [3]

pathfinder   (08.11.05 20:23) [3]
type
 TForm1 = class(TForm)
   CheckBox1: TCheckBox;
   CheckBox2: TCheckBox;
   CheckBox3: TCheckBox;
   Button1: TButton;
   Edit1: TEdit;
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   procedure CheckBoxesClick(Sender: TObject);
 public
   { Public declarations }
 end;

const
ConditionsAmount = 3;

var
 Form1: TForm1;
 substrings : array[1..ConditionsAmount] of String = ('Подстрока 1', 'Подстрока 2', 'Подстрока 3');
 activity : array[1..ConditionsAmount] of Boolean = (false, false, false);

implementation

{$R *.dfm}

procedure TForm1.CheckBoxesClick(Sender: TObject);
begin
if (Sender is TCheckBox) and ((Sender as TCheckBox).Tag in [1..ConditionsAmount]) then
 activity[(Sender as TCheckBox).Tag] := (Sender as TCheckBox).Checked;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
CheckBox1.Checked := activity[1];
CheckBox2.Checked := activity[2];
CheckBox3.Checked := activity[3];

CheckBox1.Tag := 1;
CheckBox2.Tag := 2;
CheckBox3.Tag := 3;

CheckBox1.OnClick := CheckBoxesClick;
CheckBox2.OnClick := CheckBoxesClick;
CheckBox3.OnClick := CheckBoxesClick;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
b : Boolean;
inactive : Integer;
begin
b := true;
inactive := 0;

for i := 1 to ConditionsAmount do begin
 if activity[i] then
  b := b and (Pos(substrings[i], Edit1.Text) <> 0)
 else
  Inc(inactive);
end;

if inactive < ConditionsAmount then begin
 if b then ShowMessage('Everything is OK');
end else
 ShowMessage('At least one condition should be enabled');
end;


Думай в этом ключе :)


pathfinder   (2005-11-08 20:55:00) [4]

Есть 2 текст. файла с записями вида
Фамилия^Имя^Отчество и т.д.
Программа сравнивает файлы на предмет записей с совпадающими параметрами(Фам, Имя, Отч..) и удаляет во втором файле идентичные записи. Хотелось бы задавать параметры по которым производится сравнение чекбоксами. Как это можно сделать?
Заранее всем спасибо.

begin
St1.LoadFromFile(opendialog1.FileName);
St2.LoadFromFile(opendialog2.FileName);
c:=0;
memL.Lines.Clear;
   for y:=0 to St1.Count-1 do
    begin
     S:=St1.strings[y];
     S_PR:=S;
     S_FAM:=trim(copy(s,1,pos('^',s)-1));
     delete(s,1,pos('^',s));
     S_NAM:=trim(copy(s,1,pos('^',s)-1));
     delete(s,1,pos('^',s));
     S_SUR:=trim(copy(s,1,pos('^',s)-1));
     delete(s,1,pos('^',s));
     S_DT:=trim(copy(s,1,pos('^',s)-1));
     delete(s,1,pos('^',s));
     S_DS:=trim(copy(s,1,pos('^',s)-1));
     delete(s,1,pos('^',s));
     S_DN:=trim(copy(s,1,pos('^',s)-1));
     delete(s,1,pos('^',s));
     S_DD:=trim(copy(s,1,pos('^',s)-1));
     delete(s,1,pos('^',s));
     S_DO:=trim(copy(s,1,pos('^',s)-1));
     delete(s,1,pos('^',s));
     S_AD:=trim(copy(s,1,pos('^',s)-1));
     delete(s,1,pos('^',s));
     S_DR:=trim(copy(s,1,length(s)));
      for z:=0 to St2.Count-1 do
       begin
        S2:=St2.Strings[z];
        if (Pos(S_FAM,S2)<>0) and (Pos(S_NAM,S2)<>0) and (Pos(S_SUR,S2)<>0) and
           (Pos(S_DT,S2)<>0) and (Pos(S_DS,S2)<>0) and (Pos(S_DN,S2)<>0) and
           (Pos(S_DD,S2)<>0) and (Pos(S_DO,S2)<>0) and (Pos(S_AD,S2)<>0) and
           (Pos(S_DR,S2)<>0)
         then
          begin
           memL.Lines.Add('Файл 1. Строка '+Inttostr(y+1)+': '+S_PR);
           memL.Lines.Add('Файл 2. Строка '+Inttostr(z+1)+': '+S2);
           memL.Lines.Add('');
           St2.Strings[z]:='';
           c:=c+1;
          end;
       end;
    end;
i := 0;
while i < St2.Count do
if St2.Strings[i] = '' then
  St2.Delete(i)
else
  inc(i);
if c=0 then memL.Lines.add('Повторов не обнаружено.')
      else
       begin
        memL.Lines.add('Найдено '+inttostr(c)+' повторов.');
        St2.SaveToFile(Extractfilepath(application.ExeName)+'Out\'+extractfilename(opendialog2.FileName));
       end;
end;


Джо   (2005-11-08 20:48:00) [5]


>  [4] Virgo_Style ©   (08.11.05 20:25)
> D6 и 2000 -

Одна из этих двоих, вообще-то, не компилятор, а операционная система ;P


umbra   (2005-11-08 20:45:00) [6]

2 pathfinder   (08.11.05 20:38) [5]

задавать внятные вопросы и давать завершенные фрагменты кода


pathfinder   (2005-11-08 20:38:00) [7]

Как же быть?:(


Virgo_Style   (2005-11-08 20:25:00) [8]

D6 и 2000 - вроде бы компиляторы, а не интерпретаторы...


pathfinder   (2005-11-08 20:23:00) [9]


> Zeqfreed ©

Есть такая штука:
if (Pos(S_FAM,S2)<>0) and (Pos(S_NAM,S2)<>0) and (Pos(S_SUR,S2)<>0) and
        (Pos(S_DT,S2)<>0) and (Pos(S_DS,S2)<>0) and (Pos(S_DN,S2)<>0) and
        (Pos(S_DD,S2)<>0) and (Pos(S_DO,S2)<>0) and (Pos(S_AD,S2)<>0) and
        (Pos(S_DR,S2)<>0)
и наличие каждого условия должно определятся чекбоксом.
Вот я и подумал сделать это через переменную string и как-то использовать ее в условиях для if.


umbra   (2005-11-08 20:19:00) [10]

2 pathfinder   (08.11.05 20:11)
клавиатура поможет в этом нелегком испытании


Zeqfreed   (2005-11-08 20:16:00) [11]

pathfinder   (08.11.05 20:11)
А откуда берется переменная string? И в код какой программы вставить?


Наверх

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