Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1

Временный StringList

04.08.2020, 16:35. Показов 2356. Ответов 47

Студворк — интернет-сервис помощи студентам
Часто для обработки текстовой информации мы используем тип TStringList, создавая временную переменную этого типа. При этом зачастую требуется предварительно заполнить этот список, передав указатель на него в другую процедуру. Например
Delphi
1
2
3
4
5
6
7
8
procedure FillStrings(Strings: TStrings);
var
  i: byte;
begin
  // заполнение списка
  for i in [1..10] do
    Strings.Add('string '+IntToStr(i));
end;
после этого в рабочей процедуре
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Button2Click(Sender: TObject);
var
  tempList: TStrings;
begin
  tempList:= TStringList.Create;
  FillStrings(tempList);
  ShowMessage(tempList.Text);
  tempList.Free;
end;
Я, как приверженец конструкции with, написал бы так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button2Click(Sender: TObject);
var
  tempList: TStrings;
begin
  tempList:= TStringList.Create;
  FillStrings(tempList);
  with tempList do
  begin
    ShowMessage(Text);
    Free;
  end;
end;
Но как противник лишних переменных я бы хотел избавиться от переменой tempList, нужной только лишь для того, чтобы передать ссылку в процедуру FillStrings. Для этого я описываю простенький класс-наследник и ввожу свойство-ссылку на экземпляр класса:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
implementation
 
{$R *.dfm}
 
type
  TMyStrings = class(System.Classes.TStringList)
  strict private
    function GetSelf: TStrings;
  public
    property MyStrings: TStrings read GetSelf;
  end;
 
{ TMyStrings }
 
function TMyStrings.GetSelf: TStrings;
begin
  Result:= Self;
end;
Далее все очень лаконично:
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TMyStrings.Create do
  begin
    FillStrings(MyStrings);
    ShowMessage(Text);
    Free;
  end;
end;
Можно ли это сделать без введения наследника, я так и не нашёл.
Такой вот маленький life-hack
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.08.2020, 16:35
Ответы с готовыми решениями:

Lines в StringList
Как сделать, чтобы бралось по одному значению из TStringList как в Memo? Бралось например как в Memo1.Lines; и удалялось...

Вывести из stringlist
Как выводить из stringlist по одной строке по порядку? Загрузил текст в stringlist sl.Add('Строка1'); sl.Add('Строка2'); ...

Поиск в Stringlist
Подскажите как найти нужную строку в stringlist? Я загружаю текстовый файл в stringlist ,а далее надо пройти по всем строкам и найти...

47
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
05.08.2020, 19:58
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AzAtom Посмотреть сообщение
Arcor, я не про комбинацию клавиш, а про вывод всех методов объекта через TObject.Create.
ну так конструктор возвращает ссылку на созданный обхект, значит под этим "названием" вызовется тоже автодополнятор))) так же как и если бы вызывали через приведенную сперва переменную)
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
06.08.2020, 09:24  [ТС]
Цитата Сообщение от Пытливый Посмотреть сообщение
А пользуется кто шаблонами forb, forin, ifeb и т.д. ?
я только пользуюсь шаблоном begin..end;
b > [Ctrl + J]

А вот ещё, если кто не знал. Если в коде есть незакрытый begin или case (полностью написанный) и после него или нижележащей строки нажать Enter, автоматически добавится end )
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
06.08.2020, 12:41
Цитата Сообщение от DenNik Посмотреть сообщение
А вот ещё, если кто не знал. Если в коде есть незакрытый begin или case (полностью написанный) и после него или нижележащей строки нажать Enter, автоматически добавится end )
ну еще и repeat добавит until и много чего, есть еще шаблон, с case котоырй добавляет варианты выбора с двоеточием в список, останется только заполнить скелет, тоже удобно, НО опять же не всегда, когда не все перечисление надо проверить

а вот помощник ШИФТ+КОНТРОЛ+ЦЭ тоже бесит))))))))) мне надо чтобы методы стояли в логическом порядке отсортированные по группам, а не насраны как попало))) привычка скопипастить метод и дальше добавить в нужном месте, быстрее чем потом сортировать блоки...

у каждого свои маразмы тараканы в голове
0
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,462
06.08.2020, 12:49
Цитата Сообщение от Arcor Посмотреть сообщение
помощник ШИФТ+КОНТРОЛ+ЦЭ тоже бесит
Я так и не понял логику его работы. То реализацию впендюривает сразу после implementation, то в самом конце модуля. Новые методы тоже, то в начале реализации класса, то в конце. Не понятно, в общем.
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
06.08.2020, 13:17
Цитата Сообщение от AzAtom Посмотреть сообщение
Я так и не понял логику его работы
по алфавиту он сортирует методы, без учета того, если ты переставил вручную методы. Он все равно в своем внутреннем алфавитном порядке вставит.

разные классы сортирует тоже так же один вставляет под другим. я стараюсь классы делать в разных модулях, ну если вспомогательный класс там занимает меньше 50 строчек, влепляю в какой-то логичный файл "сбоку". скролить тысячи строчек туда-обратно о боже как не так уж и приятно..
0
 Аватар для Пытливый
3763 / 2271 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
06.08.2020, 14:11
Тема полностью ушла в обсуждение эротических отношений с IDE Delphi
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
06.08.2020, 14:58  [ТС]
Цитата Сообщение от Пытливый Посмотреть сообщение
обсуждение эротических отношений
это интереснее
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
06.08.2020, 16:47
так тема и в самом начале начала идти в это направление, только что касалось with, что и как реагирует IDE на это) а на работе же надо чем-то себя занять, можно и в теме пофлудить даже по теме
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.08.2020, 16:47
Помогаю со студенческими работами здесь

Поиск по StringList
Требуется осуществить бинарный поиск по StringList. В StringList находятся строки около 6 миллионов. Переменная dic это сам StringList. В...

WebBrowser и stringlist
var a:Tstrings; begin a:=tstringlist.Create; a.Strings:='<html><body>; a.Strings:='<p align=justify> ñïðîñ</p>'; ...

Из ListView в StringList
В ListView несколько колонок, и установлен checkboxes в ListView. Интересует первая колонка, как все отмеченные записи чикетом из первой...

Работа со stringlist в потоке
Есть stringlist(глобальный) в него загружается текст из txt.Как ПРАВИЛЬНО передать stringlist в поток?Чтобы потом можно было брать...

Парсинг строки в StringList
Здравствуйте. Подскажите пожалуйста, как распарсить вот такую строку в StringList и вывести - Большой дом. строка ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru