Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 175
от 09.07.2005, 06:50

Администратор:Калашников О.А.
В номере:Вопросов: 1, Ответов: 4


Вопрос № 22994: Здравствуйте уважаемые эксперты. Допустим есть фраза "Мама мыла раму папой" Как в Edit1 - добавить Мама Как в Edit2 - добавить мыла Как в Edit3 - добавить раму папой в рассылке уже отвечали на подобный вопрос<b...

Вопрос № 22.994
Здравствуйте уважаемые эксперты.

Допустим есть фраза "Мама мыла раму папой"
Как в Edit1 - добавить Мама
Как в Edit2 - добавить мыла
Как в Edit3 - добавить раму папой

в рассылке уже отвечали на подобный вопрос

var
s : string;
i : integer;
begin
s:='Borland Delphi';
i:=Pos(' ',s);
RichEdit1.Lines.Add(Copy(s,1,i-1)); //Bordland
RichEdit2.Lines.Add(Copy(s,i+1,Length(s)-i)); //Delphi
end;

но у меня 4 слова и все мои эксперименты ни к чему не привели - помогите плиз.
Отправлен: 04.07.2005, 06:40
Вопрос задал: source (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: Ерёмин Андрей
Здравствуйте, source!
Поместите на форму 4 TEdit и TButton. Создайте обработчик нажатия кнопки. Код для него в приложении.

P.S. До чего дожили - уже людьми рамы моем... :)

Приложение:

---------
Если б не было бы глюка, жизнь была б такая скyка...

Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 04.07.2005, 10:17

Отвечает: Jadd
Здравствуйте, source!
Дык в том-то и дело, что в твоем примере привязка идет к количеству слов, а не простой лексический анализ. Так вот, берем фразу и в цикле ее обрабатываем:

var
strLexema: String;
strMyString: String;
nIndex: Integer;
holder: TStringList;
begin
//допустим наша строка - тот идиотизм, который ты привел
strMyString := 'Мама мыла раму папой';
holder := TStringList.Create;
for nIndex:=1 to Length(strMyString)-1 do
begin
//проверяем на разделители слов: пробел, запятую, точку. Остальное уж как-нибудь сам по аналогии
if (strMyStrint[nIndex] = ' ') or (strMyString[nIndex] = ',') or (strMyString[nIndex] = '.') then
begin //если нашли разделитель
//убираем лишние пробелы
strLexema := Trimg(strLexema);
//сохраняем слово например в TStringList
holder.add(strLexema);
//очищаем лексему от всего и идем дальше
strLexema := '';
end
else
//в противном случае склеиваем лексему с текущим символом
strLexema := strLexema + strMyString[nIndex];
end;

//тут нужно проверить на последнее слово на случай, если предложение не закончено знаком пунктуации или пробелом
if (Length(strLexema) > 0) then
holder.add(strLexema);
end;
Примерно так. А затем ты можешь уже распарсеный текст поместить туда, куда хочешь. Заметь, в этом коде нету и намека на привязку к количеству слов.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 04.07.2005, 10:32

Отвечает: John Freeman
Здравствуйте, source!
Не слушай сишноков - они скоро уже s1:=s2 через strcpy делать будут:
Выглядит в нормальном виде это так:
var
o,s:string;//твоя строка и временная
c:integer;
begin
s:='мама мыла раму';
o:='';//очищаем буффер
for c:=1 to length(s) do begin
if s[c]=' ' then begin memo1.lines.add(o);o:=''; else begin
o:=o+s[c];
end;
end;
---------
You're trying to take me They trying to make me This is the only Gives me the only thing Tired of lying, I'm tired of lying The only thing I inderstand is what I feel...
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 04.07.2005, 14:55

Отвечает: sir henry
Здравствуйте, source!
В Дельфи есть функция Pos(), которая ищет позицию в строке того слова, которое Вы хотите. Далее, с помощью функции Copy() выдираете нужную Вам подстроку:
const
st = 'Мама мыла раму папой';
m = 'Мама';
l = 'мыла';
r = 'раму папой';
{Искомые слова не обязательно задавать в константах, можно и интерактивно, в том же Edit'е}
var
i: integer;
Begin
{Сначала ищем позицию подстроки в заданной строке st}
i:=0;
i:=Pos(m, st);
If i>0 Then
Edit1.Text:=Copy(st, i, Length(m));
{т.е. дословно, выдрать из строки st, начиная с позиции i, количество символов определяемые длиной подстроки m}
i:=Pos(l, st);
If i>0 Then
Edit2.Text:=Copy(st, i, Length(l));
i:=Pos(r, st);
If i>0 Then
Edit3.Text:=Copy(st, i, Length(r));
End;
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 05.07.2005, 04:51


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное