Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

Как нормально определить каждое "слово" в коде?..   Найти похожие ветки 

 
SkySpeed   (2007-06-14 02:08) [0]

Пусть имеем кусок кода:
unit MyPanel;

interface

uses
 Windows, SysUtils, Classes, Controls, ExtCtrls, Graphics, Jpeg;

type
 TVAlignment=(InTop,InCenter,InBottom);

type
 TPanelka = class(TCustomPanel)
 private
   { Private declarations }
   FPicture:String;       //Путь к рисунку

   FAlignment: TAlignment;
   FVAlignment:TVAlignment;
   FTopColor:TColor;
   FBottomColor:TColor;

   FTranspEnable:Boolean;

   procedure SetTopColor(TopColor:TColor);
   procedure SetBottomColor(BottomColor:TColor);
   procedure SetAlignment(Value:TAlignment);
   procedure SetVAlignment(Value:TVAlignment);

   procedure SetTransp(Transparent:Boolean);

   procedure MyCanvasDraw(Rect:TRect;Font:TFont;Canvas:TCanvas;
                          MyCaption:TCaption;MyFlag:Integer);

   procedure SetPicture(Pic:String);


Необходимо пройтись по коду и перебрать все встречающиемя слова
Пробывал так:
procedure TForm1.Button1Click(Sender: TObject);
var
s,x:Integer;
a,ts:String;
begin
for x:=0 to RichEdit1.Lines.Count-1 do
begin
 a:=RichEdit1.Lines.Strings[x];
 for s:=1 to Length(a) do
 begin
  if a[s]<>" " then
   ts:=ts+a[s];
  if (a[s]=" ") OR (s=Length(a)) then
  begin
   ShowMessage(ts+":"+IntToStr(Length(ts)));
   ts:="";
  end;
 end;
end;
end;


Но в результате многие слова пропускаются...

Что подскажете?

P.S.: думал написать программу, которая проверяет каждое слово соответствие зарезервированному слову и если это з.с., то выделяет его (используя TRichEdit)
Зарезервированные слова думал хранить в отдельном TListBox


 
Германн ©   (2007-06-14 02:24) [1]


> Как нормально определить каждое "слово" в коде?.. [D6, D7,
>  WinXP]
>
> SkySpeed   (14.06.07 02:08)
>
> Необходимо пройтись по коду и перебрать все встречающиемя
> слова
> Но в результате многие слова пропускаются...
>
> Что подскажете?
>

Нет бога, кроме Дельфи. А Rxlib стОит загрузить на свой комп. :)
Две функции из Rxlib и никаких проблем!
WordCount & WordPosition.


 
Alex_C ©   (2007-06-14 09:47) [2]

Гм. Для интереса проверил у себя - все работает. Какие слова у тебя не выводятся?


 
Игорь Шевченко ©   (2007-06-14 10:45) [3]

Для того, чтобы пройтись по коду, вовсе не обязательно загружать его в RichEdit


 
clickmaker ©   (2007-06-14 10:48) [4]


> SkySpeed   (14.06.07 02:08)

а предполагается, что слова - это только то, что разделяется пробелами?

потому как в коде не видно обработки других разделителей, скобок, например


 
Anatoly Podgoretsky ©   (2007-06-14 11:31) [5]

Пока нет четко определения, что такое слова, то не о чем и говорить.
Во всяком случае приведенный код неработоспособен даже для пробелов.
Начать надо с постановки задачи, в части определения, что такое слово, ну а дальше дело техники.


 
Style ©   (2007-06-14 12:30) [6]


> потому как в коде не видно обработки других разделителей,
>  скобок, например


да и комментарии наверное надо будет учитывать :)

По сути человек хочит парсер синтаксиса паскаля написать. В принципе нед необходимости изобретать велосипед. Ищи компоненты SynEdit.


 
SkySpeed   (2007-06-14 12:37) [7]

Нет бога, кроме Дельфи. А Rxlib стОит загрузить на свой комп. :)
Две функции из Rxlib и никаких проблем!
WordCount & WordPosition.

Посторонние компоненты - это хорошо, но НО заключается в том, что в данных компонентах может быть много мусора, не нужного для решения моей задачи => сел писать свой обработчик :-)

Alex_C ©   (14.06.07 09:47) [2]

Гм. Для интереса проверил у себя - все работает. Какие слова у тебя не выводятся?

У меня дополнительно к словам выводятся пробелы, + не выводились uses, InTop.................. и другие


> Игорь Шевченко ©   (14.06.07 10:45) [3]
> Для того, чтобы пройтись по коду, вовсе не обязательно загружать
> его в RichEdit

Загрузка в RichEdit производится для последующей обработке найденных слов

clickmaker ©   (14.06.07 10:48) [4]

> SkySpeed   (14.06.07 02:08)

а предполагается, что слова - это только то, что разделяется пробелами?

потому как в коде не видно обработки других разделителей, скобок, например



> Anatoly Podgoretsky ©   (14.06.07 11:31) [5]
> Пока нет четко определения, что такое слова, то не о чем
> и говорить.Во всяком случае приведенный код неработоспособен
> даже для пробелов.Начать надо с постановки задачи, в части
> определения, что такое слово, ну а дальше дело техники.

Словами считать: unit,MyPanel,interface,uses,Windows,SysUtils,Classes,Controls, ExtCtrls,Graphics,Jpeg,type,TVAlignment,InTop,InCenter,InBottom........

Т.е. словами считать, всё то, что не относится к пробелам, знакам препинания, скобкам

Каждое слово будет сверяться со списком зарезервированных слов
Если же слово является зарезервированным, то оно выделяется жирным стилем, т.е.:

RichEdit1.SelStart:=Начало_зарезервированного_слова;
RichEdit1.SelLength:=Длина_зарезервированного_слова;
RichEdit1.SelAttributes.Style:=RichEdit1.SelAttributes.Style+[fsBold];


 
Anatoly Podgoretsky ©   (2007-06-14 12:50) [8]

> SkySpeed  (14.06.2007 12:37:07)  [7]

> Т.е. словами считать, всё то, что не относится к пробелам, знакам препинания, скобкам

Но у тебя в коде только проверка на пробелы!!!


 
OOO @Delphi   (2007-06-14 12:53) [9]


> Anatoly Podgoretsky ©   (14.06.07 12:50) [8]
> > SkySpeed  (14.06.2007 12:37:07)  [7]> Т.е. словами считать,
>  всё то, что не относится к пробелам, знакам препинания,
>  скобкамНо у тебя в коде только проверка на пробелы!!!

Знаю! Дополнительные условия добавить не трудно...

Но как оптимизировать поиск зарезервированных слов? :-)



Страницы: 1 вся ветка

Текущий архив: 2007.08.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.064 c
2-1185527325
DelphiLexx
2007-07-27 13:08
2007.08.26
Ускорить работу FIBDataSet.Sort


11-1168515485
Mabia
2007-01-11 14:38
2007.08.26
Установка Report&amp;Print в D6


4-1173117533
Альберт
2007-03-05 20:58
2007.08.26
почему не обновляется окно?


15-1185452230
Stan
2007-07-26 16:17
2007.08.26
Wipe algorithms


2-1186392643
pirks
2007-08-06 13:30
2007.08.26
Железо