Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Переменная TStringList, копирование строк


Pcrepair ©   (2012-06-21 21:56:00) 

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

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


Вопрос: как в Т2 скопировать только первые 3-и строки из Т1? что то сколько не смотрел методы и свойства TStringList так ничего и не увидел.


ProgRAMmer Dimonych   (2012-06-22 17:29:00) [1]

> [17] Pcrepair ©   (22.06.12 17:21)

Серьёзно? Совершенно одинаково? Хочу себе такую Delphi.


Pcrepair   (2012-06-22 17:21:00) [2]

ну там была просто путаница с подключением модуля math
сейчас все работает уже


NoUser   (2012-06-22 16:48:00) [3]

Как может быть, что
> результат совершенно одинаковый
если
> но если число строк в Т1 менее 3-х выскакивает исключение List index out of bonds()
?

> в справке об не пишут
а ты разобрался, - молодец.


ProgRAMmer Dimonych   (2012-06-22 16:31:00) [4]

> результат совершенно одинаковый

Да ну! И

for i := 0 to 2 do ...

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


Pcrepair   (2012-06-22 16:12:00) [5]

читай внимательно: результат совершенно одинаковый
об этом вопрос, а не о том что такое Min (Функция Min возвращает наименьшее значение одного из двух числовых параметров, A и B. )


ProgRAMmer Dimonych   (2012-06-22 15:49:00) [6]

И про Min в справке ничего не пишут? И про for? И про алгоритмы в учебниках ни слова?

А программиста нанять кто-нибудь уже предлагал?


Pcrepair   (2012-06-22 15:47:00) [7]

так в чем принципиальная разница при использовании
for i := 0 to Min(T1.Count - 1, 2) и for i := 0 to 2 ????
ну кроме необходимости подключать доп.модуль math?
результат совершенно одинаковый
в справке об не пишут


Ega23   (2012-06-22 10:50:00) [8]

На sql.ru по такому же топику от этого же аффтара вообще жесть.


Anatoly Podgoretsky   (2012-06-22 10:23:00) [9]

> Sha  (22.06.2012 09:22:09)  [9]

Пусть приходит только после того как установить справку, здесь не справочное
бюро


Sha   (2012-06-22 09:22:00) [10]

> Anatoly Podgoretsky ©   (22.06.12 09:11) [7]
> Выписка из справки

так у него здесь справка,
а фирменная не установлена,
как вчера выяснилось


Anatoly Podgoretsky   (2012-06-22 09:12:00) [11]


> Странно было бы видеть такой метод в исходниках procedure
> TStringList.CopyFirstThreeLines

А как жить без него, жалко Борланд умер, а то бы они написали, они любят подобное


Anatoly Podgoretsky   (2012-06-22 09:11:00) [12]


> оно зачем? что то эти процедуры нигде в источниках не расписаны

Выписка из справки
BeginUpdate method


Dimka Maslov   (2012-06-22 08:52:00) [13]

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

Странно было бы видеть такой метод в исходниках procedure TStringList.CopyFirstThreeLines(const Source: TStringList)


Омлет   (2012-06-22 08:28:00) [14]

Добавь math в uses.


Pcrepair   (2012-06-22 07:49:00) [15]

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

вообще число вводимых в МЕМО строк может быть и менее 3-х. и что тут сделать? написать if i < 3 then Exit(и вывести сообщение) перед всем. или есть другие варианты?


Омлет   (2012-06-21 23:02:00) [16]

> оно зачем?

Чтобы правильно сработали события начала и конца обновления StringList. Если так не делать, то на каждую вставку строки будет срабатывать OnChanging и OnChange, и, когда, к примеру, StringList привязан к визуальному компоненту, то будет вызываться каждый раз его перерисовка.

> что то эти процедуры нигде в источниках не расписаны

Места надо знать. Очень многое можно почерпнуть из исходников VCL. Например, посмотри реализацию методов AddStrings, Assign, Exchange и т.д. у класса TStrings - там такой же подход (beginUpdate/endUpdate).


Pcrepair   (2012-06-21 22:21:00) [17]

Спасибо, Омлет
а вот это
T2.BeginUpdate;
.....
T2.EndUpdate;

оно зачем? что то эти процедуры нигде в источниках не расписаны


Омлет   (2012-06-21 22:15:00) [18]

  T1 := TStringList.Create;
  T2 := TStringList.Create;
  T1.AddStrings(memo1.Lines);
  T2.BeginUpdate;
  try
    for i := 0 to Min(T1.Count - 1, 2) do
      T2.Add(T1[i])
  finally
    T2.EndUpdate;
  end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо