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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.06.2012, 21:57
Pcrepair
 
Сообщения: n/a
По умолчанию Переменная TStringList, копирование строк

Добрый день. есть следующее:

Код:
var T1,T2:TstringList
 begin
   T1 := TStringList.Create;
   T2 := TStringList.Create;
   T1.Text := Memo1.Text; (*вводим в Т1 10 строк текста(к примеру), каждая строка одно слово*)
   .......
end.

Вопрос: как в Т2 скопировать только первые 3-и строки из Т1? что то сколько не смотрел методы и свойства TStringList так ничего и не увидел.
Ответить с цитированием
  #2  
Старый 21.06.2012, 22:02
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Код:
T1.Add(Memo1.Lines.Strings[i])
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 21.06.2012 в 23:00.
Ответить с цитированием
  #3  
Старый 21.06.2012, 22:04
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Использовать:
1. T2.Strings[0] := T1.Strings[0];
2. T2.Add(T1.Strings[0]);
3. Использовать цикл.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 21.06.2012 в 22:22.
Ответить с цитированием
  #4  
Старый 21.06.2012, 22:18
Pcrepair
 
Сообщения: n/a
По умолчанию

у TstringList не метода Lines
только грузить в файл(поток) и какое то LineBreak
Ответить с цитированием
  #5  
Старый 21.06.2012, 22:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Конечно нет, это оЧеПятка.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 22.06.2012, 07:55
Pcrepair
 
Сообщения: n/a
По умолчанию

есть такой вариант
Код:
for i := 0 to 2 do
T2.Add(T1[i])
и все хорошо но такой косячок обнаружился:
если написать по простому: for i := 0 to 2 do компиляция в норме, но если число строк в Т1 менее 3-х выскакивает исключение List index out of bonds() с указание строки в скобках, которой нехватает до 3-х

вообще число вводимых в МЕМО строк может быть и менее 3-х. и что тут сделать? написать if i < 3 then Exit(и вывести сообщение) перед всем. или есть другие варианты?
может обойтись без цикла и просто написать:
T2.Add(T1[0])
T2.Add(T1[1])
T2.Add(T1[2])
Какой вариант правильный с точки зрения теории и практики?
Ответить с цитированием
  #7  
Старый 22.06.2012, 09:04
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

правильный вариант должен быть с точки зрения ситуации (которую знает только один человек тут)
если без вывода сообщения, то можно так:
Код:
for i := 0 to 2 do
  if i <= T2.count - 1 then
    T2.Add(T1[i])
Код:
for i := 0 to min(2, T2.count - 1) do
  T2.Add(T1[i])

если таки надо заставить юзера ввести три, то сообщение считаю самым примитивным вариантом, если хочется лучше, то можно например, чтобы кнопка активировалась только когда есть 3 строчки, но тогда надо где-то подсказку, что бы было понятно, что делать в данный момент, почему кнопка не активна
или можно посмотреть как такое сделано в других программах

Последний раз редактировалось Pyro, 22.06.2012 в 09:18.
Ответить с цитированием
  #8  
Старый 22.06.2012, 19:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Pcrepair
есть такой вариант
Код:
for i := 0 to 2 do
T2.Add(T1[i])
и все хорошо но такой косячок обнаружился:
если написать по простому: for i := 0 to 2 do компиляция в норме, но если число строк в Т1 менее 3-х выскакивает исключение List index out of bonds() с указание строки в скобках, которой нехватает до 3-х

Ну а если как следует подумать???
Код:
for i := 0 to min(2,T2.Count-1) do
  ...
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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