![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как нормально определить каждое "слово" в коде?.. [D6, D7, WinXP]
SkySpeed © (2007-06-14 02:08:00)Пусть имеем кусок кода:
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
OOO @Delphi (2007-06-14 12:53:00) [1]
> Anatoly Podgoretsky © (14.06.07 12:50) [8]
> > SkySpeed (14.06.2007 12:37:07) [7]> Т.е. словами считать,
> всё то, что не относится к пробелам, знакам препинания,
> скобкамНо у тебя в коде только проверка на пробелы!!!
Знаю! Дополнительные условия добавить не трудно...
Но как оптимизировать поиск зарезервированных слов? :-)
Anatoly Podgoretsky (2007-06-14 12:50:00) [2]> SkySpeed (14.06.2007 12:37:07) [7]
> Т.е. словами считать, всё то, что не относится к пробелам, знакам препинания, скобкам
Но у тебя в коде только проверка на пробелы!!!
SkySpeed (2007-06-14 12:37:00) [3]Нет бога, кроме Дельфи. А 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];
Style (2007-06-14 12:30:00) [4]
> потому как в коде не видно обработки других разделителей,
> скобок, например
да и комментарии наверное надо будет учитывать :)
По сути человек хочит парсер синтаксиса паскаля написать. В принципе нед необходимости изобретать велосипед. Ищи компоненты SynEdit.
Anatoly Podgoretsky (2007-06-14 11:31:00) [5]Пока нет четко определения, что такое слова, то не о чем и говорить.
Во всяком случае приведенный код неработоспособен даже для пробелов.
Начать надо с постановки задачи, в части определения, что такое слово, ну а дальше дело техники.
clickmaker (2007-06-14 10:48:00) [6]
> SkySpeed (14.06.07 02:08)
а предполагается, что слова - это только то, что разделяется пробелами?
потому как в коде не видно обработки других разделителей, скобок, например
Игорь Шевченко (2007-06-14 10:45:00) [7]Для того, чтобы пройтись по коду, вовсе не обязательно загружать его в RichEdit
Alex_C (2007-06-14 09:47:00) [8]Гм. Для интереса проверил у себя - все работает. Какие слова у тебя не выводятся?
Германн (2007-06-14 02:24:00) [9]
> Как нормально определить каждое "слово" в коде?.. [D6, D7,
> WinXP]
>
> SkySpeed (14.06.07 02:08)
>
> Необходимо пройтись по коду и перебрать все встречающиемя
> слова
> Но в результате многие слова пропускаются...
>
> Что подскажете?
>
Нет бога, кроме Дельфи. А Rxlib стОит загрузить на свой комп. :)
Две функции из Rxlib и никаких проблем!
WordCount & WordPosition.