Вниз
Скачать: 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.04 c
15-1146384583
Rule
2006-04-30 12:09
2006.05.28
Нет ли желания сделать мастак пати ???


15-1146750860
acL
2006-05-04 17:54
2006.05.28
Как установить игру


2-1147366443
BAngel
2006-05-11 20:54
2006.05.28
SaveDialog


3-1144404814
Russ
2006-04-07 14:13
2006.05.28
запрос для выбора данных из двух БД


2-1147610891
Silver_Wolf
2006-05-14 16:48
2006.05.28
Запрет




   Наверх