Текущий архив: 2006.05.28;
Скачать: 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 вся ветка
Текущий архив: 2006.05.28;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.01 c