Вниз
Скачать: CL | DM;

Поиск строк в Pas-модуле Delphi   Найти похожие ветки 

 
Dr. Genius   (2006-05-05 17:57) [0]

Здравствуйте!

Как можно определить строки в Pas-модуле Delphi? То есть строки, заключенные в апострофы.


 
Dr. Genius   (2006-05-05 17:58) [1]

Я имею ввиду, как их (строки) считать в некую строковую переменную.


 
TUser ©   (2006-05-05 18:01) [2]

Читай на тему "Конечные автоматы". У тебя будет три входных символа - апостроф, не-апостроф и перевод строки. Состояния - не в строке, в строке, встретили апостроф в строке, нетерминированная строка.

Хорошая книжка - В.В. Мозговой.


 
Loginov Dmitry ©   (2006-05-05 18:07) [3]

Используй класс TParser в модуле Classes


 
atruhin ©   (2006-05-06 19:20) [4]

Для быстрого решения найди сайт Alex Konshin у него выложен модуль StringConv очень полезные функции для парсинга/сборки. Далее ищешь апостроф и дной функцией извлекаешь строку.


 
Leonid Troyanovsky ©   (2006-05-07 08:18) [5]


> atruhin ©   (06.05.06 19:20) [4]

>  Далее ищешь апостроф и дной функцией извлекаешь строку.


Classes.TParser: if Token = toString then TokenString

--
Regards, LVT.


 
Dr. Genius   (2006-05-07 11:18) [6]

Никак не могу додуматься до алгоритма поиска этих самых строк (заключенных в апострофы). Тут я обнаружил много нюансов:

- надо чтобы пустые строки (такие как ‘’) игнорировались;
- обычные строки (такие как ‘This is some string’) записывались в некую строку;
- также, чтобы корректно находились (и тоже записывались) строки, содержащие в себе апострофы (такие как, ‘I’’m your program’).

Вот до чего я пока додумался, но это еще далеко не то, что мне надо:

for I := 1 to Length (S) do
if (S [I] = """") and (S [I + 1] <> """") and (S [I - 1] <> """") then…;
(S – это строка, куда записывается содержимое PAS-модуля Delphi):

А модуль StringConv я не нашел... Может, ссылку дадите.


 
Loginov Dmitry ©   (2006-05-07 11:53) [7]

Dr. Genius   (07.05.06 11:18) [6]
StringConv я не нашел... Может, ссылку


А чем варианты [3] и [5] не устраивают?


 
Dr. Genius   (2006-05-08 11:21) [8]

Понятия не имкю, как пользоваться TParser"ом.


 
Loginov Dmitry ©   (2006-05-08 16:11) [9]

Dr. Genius   (08.05.06 11:21) [8]
Понятия не имкю, как пользоваться TParser"ом.


Вот пример:

procedure TForm1.btnFindAllStringsClick(Sender: TObject);
var
 Parser: TParser;
 Ms: TMemoryStream;
begin
 MemoPascalStrings.Clear;
 Ms := TMemoryStream.Create;
 Memo1.Lines.SaveToStream(Ms);
 Ms.Seek(0, soFromBeginning);
 Parser := TParser.Create(Ms);

 while Parser.Token <> toEOF do
 begin
   if Parser.Token = toString then
     MemoPascalStrings.Lines.Append(Parser.TokenString);
   Parser.NextToken;
 end;

 Parser.Free;
 Ms.Free;
end;


Среди недостатоков этого парсера отмечу, что невозможно вернуться, т.е. начать анализировать текст сначала (каждый раз парсер следует создавать заново). Хотя это скорее всего глюк (т.е. ошибка разработчиков класса).


 
Dr. Genius   (2006-05-10 09:13) [10]

Спасибо! Все работает!



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.023 c
5-1132555632
Mishenka
2005-11-21 09:47
2006.05.28
Где хранить ImageList?


2-1147420555
Ling
2006-05-12 11:55
2006.05.28
в чём разница?


2-1147259154
alles
2006-05-10 15:05
2006.05.28
Переполнение типа Byte


15-1146553952
Николай_Москва
2006-05-02 11:12
2006.05.28
Не видны значения переменных под отладчиком


15-1146229579
Alex7
2006-04-28 17:06
2006.05.28
Windows XP-панель задач




   Наверх