Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.49 MB
Время: 0.066 c
2-1339657502
AntiUser
2012-06-14 11:05
2013.03.22
Как правильно создать наследников фрейма


2-1342690776
vasa777
2012-07-19 13:39
2013.03.22
другой домен


15-1334261351
К
2012-04-13 00:09
2013.03.22
Поменять курсор


15-1344012320
wl
2012-08-03 20:45
2013.03.22
посоветуйте Фильм (именно так, с большой буквы)


6-1189685288
Ира
2007-09-13 16:08
2013.03.22
Блокировка инет трафика





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский