Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПеременная 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.069 c