Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.02.2011, 02:37
disker disker вне форума
Прохожий
 
Регистрация: 20.02.2011
Сообщения: 12
Репутация: 10
Вопрос Копирование из memo1 в memo2 на Delphi 7

Помогите разобраться с кодом. В memo1 находится такой текст:
Цитата:
Нью-Орлеан Лейкерс 95 101
Оклахома Нью-Орлеан 104 93
Нью-Орлеан Вашингтон 97 89
Финикс Нью-Орлеан 104 102
Сакраменто Нью-Орлеан 102 96
Миннесота Денвер 100 113
Торонто Миннесота 111 100
Миннесота Мемфис 84 102
Миннесота Торонто 103 87
Юта Миннесота 108 100
Миннесота Нью-Орлеан 113 98
Нью-Орлеан Миннесота 114 86
Миннесота Нью-Орлеан 94 96
Миннесота Нью-Орлеан 96 97
Нью-Орлеан Миннесота 98 89
Нью-Орлеан Миннесота 94 93
Нью-Орлеан Миннесота 101 97
Миннесота Нью-Орлеан 116 108
Миннесота Нью-Орлеан 90 122
Нью-Орлеан Миннесота 110 76
Нужно его скопировать в memo2, но чтобы получилось так:

Цитата:
Нью-Орлеан
Лейкерс
95
101
Оклахома
Нью-Орлеан
104
93
.......
.......

Нью-Орлеан
Миннесота
110
76
То есть чтобы каждое слово было в отдельной строке. Возможно ли такое сделать? Спасибо.
Ответить с цитированием
  #2  
Старый 20.02.2011, 03:09
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Попробуй так:
Код:
Memo2.Text := StringReplace(Memo1.Text, ' ', #13#10, [rfReplaceAll]);
Ответить с цитированием
  #3  
Старый 20.02.2011, 16:14
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию

Вот решил. Здесь при нажатии на кнопку текст из Memo1 копируется построчно в Memo2

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 s2:String;
 s:String;
 i,j:integer;
begin
   try
    s:=memo1.Text;
    s2:='';
    i:=1;
    while (i<=length(s)) do
     begin
      if s[i]<>' ' then
       begin
        s2:=s2+s[i];
       end;
      if s[i]=' ' then
       begin
        Delete(s,1,i);
        if (s2<>'') then
         memo2.Lines.Add(s2);
        s2:='';
        i:=0;
       end;
      inc(i);
     end;
     memo2.Lines.Add(s);
   except
    on e:Exception do
   end;
end;
Ответить с цитированием
  #4  
Старый 20.02.2011, 16:53
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

Код:
var
  i: integer;
begin
  Memo2.Lines.Text := WrapText(StringReplace(Memo1.Lines.Text, #13#10, ' ', [rfReplaceAll]), #13#10, [' '], 0);
  for i:=0 to Memo2.Lines.Count-1 do
    Memo2.Lines[i] := TrimRight(Memo2.Lines[i]); //убираем пробелы в конце строк, который получились из-за WrapText
end;

Но вариант ryderx34 короче , а мой чисто познавательный.

Последний раз редактировалось Assistant, 20.02.2011 в 16:58.
Ответить с цитированием
  #5  
Старый 21.02.2011, 00:54
disker disker вне форума
Прохожий
 
Регистрация: 20.02.2011
Сообщения: 12
Репутация: 10
По умолчанию

Всем спасибо за ответы. Завтра попробую и отпишусь работает ли. Только мне нужно будет это делать автоматом, а не при нажатии кнопки. Эта операция как бы будет одной из многих. При нажатии кнопки будет отсеиваться текст из файла к такому как в первой цитате, а уж потом копироваться для последующей обработки в мемо2. А после мемо2 уже будут проводится дальнейшая обработка с текстом, как к примеру сколько раз каждое слово встречается в тексте в мемо2.
Ответить с цитированием
  #6  
Старый 21.02.2011, 14:32
disker disker вне форума
Прохожий
 
Регистрация: 20.02.2011
Сообщения: 12
Репутация: 10
По умолчанию

Странно, но ни один из предложенных методов не работает. В первом случае получаем вот такую ошибку, хотя мемо2 прописал в unit2.pas как Memo2: TMemo; :

Цитата:
[DCC Error] Unit2.pas(106): E2003 Undeclared identifier: 'Memo2'

во втором случае получаю такой текст, что немного не подходит - нужно по одному слову в каждую строчку:

Цитата:
Memo2
Шарлотт
Даллас 92
101
Шарлотт
Майами 97
109
Детройт
Шарлотт 87
97
Юта
Шарлотт 83
78
Клипперс
Шарлотт 103
88
Бостон
Орландо 91
80
Бостон
Даллас 97
101
Сакраменто
Бостон 90
95
Лейкерс
Бостон 96
109
Финикс
Бостон 88
71
Бостон
Шарлотт 99
94
Шарлотт
Бостон 62
93
Бостон
Шарлотт 92
71
Бостон
Шарлотт 104
80
Шарлотт
Бостон 90
108
Бостон
Шарлотт 92
59
Бостон
Шарлотт 111
109
Шарлотт
Бостон 114
106
Шарлотт
Бостон 84
89
Шарлотт
Бостон 78
101


в третьем случае тоже получаю ошибку, какую ещё не разобрался до конца...
Ответить с цитированием
  #7  
Старый 21.02.2011, 14:33
disker disker вне форума
Прохожий
 
Регистрация: 20.02.2011
Сообщения: 12
Репутация: 10
По умолчанию

Прошу прощения, немного не те комманды в примере но это сути не меняет - шаблон ввода один и тот же для разного текста..
Ответить с цитированием
  #8  
Старый 21.02.2011, 15:32
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
Странно, но ни один из предложенных методов не работает. В первом случае получаем вот такую ошибку, хотя мемо2 прописал в unit2.pas как Memo2: TMemo; :
Ну как-бы сами виноваты. Надо было просто на форму добавить компонент Memo2 все остальное Дельфи сделал бы сам. Решение которое дал
ryderx34 вполне нормальное и самодостаточное.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 21.02.2011, 16:58
disker disker вне форума
Прохожий
 
Регистрация: 20.02.2011
Сообщения: 12
Репутация: 10
По умолчанию

Ну я уже не настолько ламер, хотя конечно не сильно разбираюсь в делфи )) мемо2 на форму добавил в первую очередь и это я и имел ввиду когда написал что прописал в unit2.pas как Memo2: TMemo; Может сам компилятор клинит. Ладно попробую ещё раз...
Ответить с цитированием
  #10  
Старый 21.02.2011, 17:23
disker disker вне форума
Прохожий
 
Регистрация: 20.02.2011
Сообщения: 12
Репутация: 10
По умолчанию

И всё-таки решение не правильное. Вот скриншот , чтобы было более убедительно:
Изображения
Тип файла: jpg 444444444444.jpg (68.5 Кбайт, 19 просмотров)
Ответить с цитированием
  #11  
Старый 21.02.2011, 19:49
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вообще-то судя по скрину, у вас разделителями могут быть не только пробелы. Явно видно, что там табуляция а не пробел, а посему тогда так:
Код:
Memo2.Text := StringReplace(Memo1.Text, #32, #13#10, [rfReplaceAll]);
Memo2.Text := StringReplace(Memo1.Text, #8, #13#10, [rfReplaceAll]);
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 22.02.2011, 00:02
disker disker вне форума
Прохожий
 
Регистрация: 20.02.2011
Сообщения: 12
Репутация: 10
По умолчанию

Странно, теперь вообще без изменений - просто копирует как в мемо1... Не могу загрузить скрин, почему-то не открывается окно загрузки файлов на форуме..
Ответить с цитированием
  #13  
Старый 22.02.2011, 00:06
disker disker вне форума
Прохожий
 
Регистрация: 20.02.2011
Сообщения: 12
Репутация: 10
По умолчанию

Вот, вроде заработал форум...
Изображения
Тип файла: jpg 5555555.JPG (76.1 Кбайт, 9 просмотров)
Ответить с цитированием
  #14  
Старый 22.02.2011, 00:08
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

Цитата:
Сообщение от disker
Странно, теперь вообще без изменений - просто копирует как в мемо1... Не могу загрузить скрин, почему-то не открывается окно загрузки файлов на форуме..
Заархивировал бы ты весь проект да выложил, тогда бы и разбирались.
Еще рекомендовал бы заменить в файле 1.txt все табуляторы одиночным пробелом и пробелы которых больше одного тоже на одиночный пробел, тогда код Memo2.Text := StringReplace(Memo1.Text, ' ', #13#10, [rfReplaceAll]) работает, я у себя проверил.

Последний раз редактировалось Михалыч, 22.02.2011 в 00:14.
Ответить с цитированием
  #15  
Старый 22.02.2011, 02:22
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Я тоже кое-что накосячил. С учетом повторов и других символов так получится:
Код:
 Memo2.Text := Memo1.Text;
 while Pos(#32#32,Memo2.Text) > 0
 do Memo2.Text := StringReplace(Memo2.Text, #32#32, #32, [rfReplaceAll]);
 while Pos(#9#9,Memo2.Text) > 0
 do Memo2.Text := StringReplace(Memo2.Text, #9#9, #9, [rfReplaceAll]);
 Memo2.Text := StringReplace(Memo2.Text, #32, #13#10, [rfReplaceAll]);
 Memo2.Text := StringReplace(Memo2.Text, #9, #13#10, [rfReplaceAll]);
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 22.02.2011 в 02:38.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025