Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
2-1185880238
ReKLer
2007-07-31 15:10
2007.08.26
глубина цвета


8-1163478013
Tab
2006-11-14 07:20
2007.08.26
квадрат с вращением в OpenGL


15-1185952761
Nic
2007-08-01 11:19
2007.08.26
TACACS


2-1186160090
sashap
2007-08-03 20:54
2007.08.26
Замена popmenu в tstringgrid е


8-1163582558
Ludmila
2006-11-15 12:22
2007.08.26
Bitmap из метафайла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский