Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

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

 
Pcrepair ©   (2012-06-21 21:56) [0]

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

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


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


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

  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;


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

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

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


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

> оно зачем?

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

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

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


 
Pcrepair ©   (2012-06-22 07:49) [4]

тут вот такие косячки обнаружились:
если написать: 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-22 08:28) [5]

Добавь math в uses.


 
Dimka Maslov ©   (2012-06-22 08:52) [6]

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

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


 
Anatoly Podgoretsky ©   (2012-06-22 09:11) [7]


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

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


 
Anatoly Podgoretsky ©   (2012-06-22 09:12) [8]


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

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


 
Sha ©   (2012-06-22 09:22) [9]

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

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


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

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

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


 
Ega23 ©   (2012-06-22 10:50) [11]

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


 
Pcrepair ©   (2012-06-22 15:47) [12]

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


 
ProgRAMmer Dimonych ©   (2012-06-22 15:49) [13]

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

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


 
Pcrepair ©   (2012-06-22 16:12) [14]

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


 
ProgRAMmer Dimonych ©   (2012-06-22 16:31) [15]

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

Да ну! И

for i := 0 to 2 do ...

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


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

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

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


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

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


 
ProgRAMmer Dimonych ©   (2012-06-22 17:29) [18]

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

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



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.055 c
15-1342737184
Германн
2012-07-20 02:33
2013.03.22
Братья с Украины. Где в Одессе


15-1349382603
Юрий
2012-10-05 00:30
2013.03.22
С днем рождения ! 5 октября 2012 пятница


15-1330893003
Юрий
2012-03-05 00:30
2013.03.22
С днем рождения ! 5 марта 2012 понедельник


2-1329472416
AlxAY
2012-02-17 13:53
2013.03.22
Как в отдельном потоке вызвать функцию из основного без зависаний


15-1330351343
Тенерман
2012-02-27 18:02
2013.03.22
Данные -> TShiftState.