![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переменная 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;