Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > "Резервация" слов


Автор: Alkash 5.7.2004, 16:29
Каким образом для RichEdit замутить резервацию слов?Например если слово встречается в тексте, чтоб выделялось по особому?
Пробовал замутить необходимые слова как булевый массив, да чёт не выходит sad.gif

Автор: Albinos_x 5.7.2004, 16:47
попробуй сделать через запись

Автор: p0s0l 9.7.2004, 14:56
Если честно, не понял суть проблемы... Надо в тексте выделить к примеру все слова "procedure" или как ?
Цитата
Пробовал замутить необходимые слова как булевый массив, да чёт не выходит

А это как это ? Слова как булевый массив... хм...

Автор: Pakshin A. S. 9.7.2004, 18:13
Может запихнуть все слова в связанный список или организовать дерево (я бы остановился на последнем, т. к. работать будет гораздо быстрее)

Автор: Alkash 9.7.2004, 20:01
p0s0l
Именно так, а булевый массив- это массив типа of boolean.

Автор: p0s0l 9.7.2004, 21:28
Цитата
Именно так, а булевый массив- это массив типа of boolean.

А я то ломал голову... smile.gif
Ты лучше расскажи затею, куда пихать-то этот булевый массив ? А то у меня сомнения, что всё-таки я неправильно понимаю задачу: в тексте надо выделить зарезервированные слова ?
Если так, то вот наброски:
Код
const
 reserved_words : array [0..6] of string =
   ('procedure', 'begin', 'end', 'function', 'unit', 'uses', 'type'); // тут перечисли все зарезервированные слова

procedure TForm1.Button3Click(Sender: TObject);
var
 txt, w : string;
 i, i0, j : integer;
 c : char;
 Found : boolean;

begin
 txt := RichEdit1.Text;
 i := 1;
 i0 := 1;
 for i := 1 to Length(txt) do
 begin
   c := txt[i];
   if not (((c >= 'A') and (c <= 'Z')) or
      ((c >= 'a') and (c <= 'z')) or
      ((c >= 'А') and (c <= 'Я')) or // проверку русских букв можно убрать, если нет русских зарезервированных слов
      ((c >= 'а') and (c <= 'я'))) then
      begin
        if i0 < i then
        begin
          w := Copy(txt, i0, i-i0);
          w := AnsiLowerCase(w);
          Found := false;
          for j := Low(reserved_words) to High(reserved_words) do
            if reserved_words[j] = w then
            begin
              Found := true;
              Break;
            end;
          if Found then
          begin
            RichEdit1.SelStart := i0-1;
            RichEdit1.SelLength := i - i0;
            RichEdit1.SelAttributes.Color := clRed;
          end;
        end;
        i0 := i+1;
      end;
 end;
end;

Мож совсем не то накатал ??... smile.gif

Автор: Alkash 9.7.2004, 23:42
p0s0l
То что надо, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)