Кто вас учил тому, что set=array? Конечно не работает, человек не видит разницы между двумя разными типами элементов.
Конечно не вижу, у меня компилятора под рукой нет. ) Во всяком случае, объявляется как массив. Тут нужна конструкция наподобие "For each". Посмотрим что за "наборы" такие хитрые...
Могу предложить задавать banned строкой const banned='!@#$%^&*()' и условие Edit1.Text in banned заменить на Pos(Edit1.Text, banned)<>0. Если в дальнейшем нужно будет заменять не по одному символу, то лучше так не делать
Да вот в том то и дело что пришлось отказаться от: Code: for i:=1 to Length(Edit2.text) do str:=StringReplace(str,Edit2.text[i],'+',[rfReplaceAll, rfIgnoreCase]); А мудрения с if я не пойму: Code: for i:=1 to Length(Edit7.text) do if Edit6.Text[i] = Edit7.text then str:=Edit7.Text+'Sym' else str:=Edit6.Text+Edit6.Text[i]; Edit1.text:=str;
Тьфу ты. Ну конечно, запутали в конец... Тут никаких set'ов не нужно. Всё делается простым регэкспом.
Code: var RE: variant; begin re:= CreateOLEObject("VBScript.RegExp"); re.global :=true; re.pattern := '^[0-9]'; //подгоните шаблон как вам надо Showmessage (re.replace ( text1.text, 'Sym')); примерно так.
Code: const banned='!@#$%^&*()'; ........ str:=''; for i:=1 to Length(Edit7.text) do if Pos(Edit7.Text[i], banned)<>0 then str:=str.Text+'Sym' else str:=str+Edit7.Text[i]; Edit7.text:=str; Лучше б ты поднапрягься и понял суть) У тебя хрень написана совсем не логичная
Изначально правильно поставленный вопрос, содержит в себе половину ответа. Вот тебе готовая функция: PHP: function CheckSym(Filter,Str:string):string;vari,j:integer;begin for i:=1 to length(Filter) do for j:=1 to length(Str) do If Str[j]=Filter[i] Then begin Delete(Str,j,1); Insert('SYM',Str,j); end; Result:=Str;end; Во вложенном цикле, каждый символ строки Str, прогоняется по фильтру Filter и при совпадении, символ удаляется, а на его место записывается SYM Юзать надо так: PHP: Edit2.Text:=CheckSym(Edit1.Text, Edit2.Text); Edit1 - содержит запрещенные символы Edit2 - содержит проверяемую строку
Есть ещё одна проблема которую никак не могу придумать как решить: Code: var Filter,str:string; i,j:integer; begin str:=Edit6.text; filter:=Edit7.text; for i:=1 to length(Edit6.text) do for j:=1 to length(Edit6.text) do If Edit6.text[j]=Edit7.text[i] Then begin Delete(Edit6.text,j,1); Insert('.',Str,j); end; Edit1.text:=str; end; Delete(Edit6.text,j,1);> Constant object cannot be passed as var parameter Дело в том что в программе задумывается несколько таких условий только замена происходит разными символами ! А под каждый Edit очень не хочется string писать: Code: var s:string; str:=Edit1.text; Delete(str,j,1);>