Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2013, 15:29   #1
qpMAXqp
Пользователь
 
Аватар для qpMAXqp
 
Регистрация: 20.11.2013
Сообщений: 16
Счастье Delphi. Вывод слов в Memo, через Enter

Здравствуйте, уважаемые программисты.
Необходимо создать программу, которая будет выводить слова в объект "Memo" через Enter.
Например, мы ввели в Edit: Мама мыла раму,
В Memo выведет следующее:
Мама
Мыла
Раму,
Вот так вот.
Такой вот я код написал, здесь, правда, он выводит только 1ю букву всего предложения:
Код:
var
  i, p: Integer;
  e, e1: string;
begin
 e:= Form1.edt1.Text;
 p:= 0;
    for i:= 1 to Length(e) do
      begin
        if e[i] <> '' then
        e1:= e[i]

         else
         p:= p + 1;
      end;

      Form1.mmo1.Lines.Add(e[1]);
end;
qpMAXqp вне форума Ответить с цитированием
Старый 20.11.2013, 15:37   #2
Unique_Maks
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 89
По умолчанию

дык ты её и выводишь)
Код:
Form1.mmo1.Lines.Add(e[1]);
Unique_Maks вне форума Ответить с цитированием
Старый 20.11.2013, 15:38   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
if e[i]<>' ' then 
  e1:=e1+e[i]; //добавляем к рабочей строке наш символ
else
begin //слово кончилось нам пора выводить
  self.memo1.Lines.add(e1);
  e1:=''; // начинать набрать слово заново  
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.11.2013, 18:39   #4
qpMAXqp
Пользователь
 
Аватар для qpMAXqp
 
Регистрация: 20.11.2013
Сообщений: 16
По умолчанию

По прежнему, выводится лишь 1-я буква словосочетания.
И еще такая проблема: при отсутствии пробелов, слово не выводится
qpMAXqp вне форума Ответить с цитированием
Старый 20.11.2013, 22:55   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так устроит?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s, e1 : string;
  i : integer;
begin
  Memo1.Lines.Clear;
  s := Trim(Edit1.Text);
  if length(s)<>0 then begin
      if s[length(s)]<>' ' then s := s+' ';
      e1 := '';
      for i:=1 to length(s) do
        if s[i]=' ' then begin
          if trim(e1)<>'' then          
               Memo1.Lines.Append(e1);
          e1 := '';
        end
        else e1 := e1 + s[i];
  end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.11.2013, 23:00   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

После этого :
Цитата:
s := Trim(Edit1.Text);
Мы в любом случае попадем сюда :
Цитата:
if s[length(s)]<>' ' then s := s+' ';
Poma][a вне форума Ответить с цитированием
Старый 20.11.2013, 23:14   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
После этого...
Мы в любом случае попадем сюда :
Да, точно так!

спасибо за поправку.
я бы так изменил свой пример:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s, e1 : string;
  i : integer;
begin
  Memo1.Lines.Clear;
  s := Trim(Edit1.Text);
  if length(s)<>0 then begin
      s := s+' ';
      e1 := '';
      for i:=1 to length(s) do
        if s[i]=' ' then begin
          if trim(e1)<>'' then          
               Memo1.Lines.Append(e1);
          e1 := '';
        end
        else e1 := e1 + s[i];
  end;
end;
пишу код на форум, а сам уже сплю...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.11.2013, 23:20   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
пишу код на форум, а сам уже сплю...
Как я Вас понимаю
Еще одно замечание..
Цитата:
if trim(e1)<>'' then
Трим не нужен.. он удаляет лишь пробелы, их их мы как раз и отсекаем развилочкой..

Кстати, интересно.. А можно-ли как-нибудь обойтись без развилки, но так, чтобы в цикл при s = '' мы не вошли?
Poma][a вне форума Ответить с цитированием
Старый 20.11.2013, 23:20   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
при отсутствии пробелов, слово не выводится
Это уже беда, а не слово. Кроме всего прочего, а именно пробелов, расположения слова в начале или конце строки, со словом может граничить знак пунктуации или кавычка. Ну а поскольку машинное представление, то в тексте запросто могут быть символы перевода каретки и строки, а то и символ табуляции. Последнее экзотично для обычного текста, но все же. Если подумать, то еще какую-нибудь гадость придумаю

ADD

Придумал. Дефис может быть как частью слова, так и знаком пунктуации
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.11.2013 в 23:27.
Аватар вне форума Ответить с цитированием
Старый 21.11.2013, 12:26   #10
qpMAXqp
Пользователь
 
Аватар для qpMAXqp
 
Регистрация: 20.11.2013
Сообщений: 16
По умолчанию

Большое спасибо Serge_Bliznykov =)
Надо будет вникнуть, а то ход мысли не совсем понятен, а именно эти фрагменты:
Код:
  s := s+' ';
      e1 := '';
и вот это
Код:
 if trim(e1)<>'' then          
               Memo1.Lines.Append(e1);
          e1 := '';
        end
        else e1 := e1 + s[i];
А так, премного благодарен =)
qpMAXqp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск слов в Memo Ol'KA Помощь студентам 4 30.11.2012 01:06
Memo - Enter в виде квадратика.. kta87 Общие вопросы Delphi 2 10.04.2012 14:19
Удаление одинаковых слов в Memo. sxcine Общие вопросы Delphi 7 03.01.2011 12:56
Delphi. Вывод данных через USB AlessOn Помощь студентам 9 02.11.2010 23:21
выход через ESC и блокировка пробела и enter на форме Erick Cartman Общие вопросы Delphi 2 08.03.2010 19:08