![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вставить содержимое пер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? И в код какой программы вставить?