С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/75: Рейтинг темы: голосов - 75, средняя оценка - 4.63
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515

Как добавить текст в список типа TStringList

11.04.2016, 06:53. Показов 17110. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Мне необходимо добавить произвольный текст в список типа TStringList. Так как текст содержит символы перевода строки и возврата каретки, то нужно, чтобы текст разбивался на строки в списке.
Пока не придумал ничего лучше, чем сделать так:
Delphi
1
StringList.Text:=StringList.Text + MyText;
Проблема в том, что это помещено в цикл, а, как я понимаю, постоянное копирование всего текста из списка и обратно в список достаточно накладно по производительности при большом размере текста. Есть ли возможность добавлять текст в список менее затратно?
Если сделать просто
Delphi
1
StringList.Add(MyText);
то в списке весь добавляемый текст MyText будет записан одной строкой, что меня не устраивает. Какие ещё есть варианты?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2016, 06:53
Ответы с готовыми решениями:

Как добавить к ячейке DataGrid список типа DBCombo?
Подскажите чайнику как добавить к ячейке DataGrid список типа DBCombo? Или дайте ссылку на пример с исходным кодом.

Как добавить строчку в Tstringlist
Всем привет как можно добавить строку в Tstringlist не в конец списка а на 1 место и что бы не удалять 1 строку так...

Как перенести переменную типа TStringList в другой модуль
Как перенести глобальную переменную типа TStringList в другой модуль (Unit2 например), чтобы она при этом сохранила свое значение? ...

21
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
11.04.2016, 07:13
См Delimiter
0
87 / 30 / 19
Регистрация: 16.01.2015
Сообщений: 250
11.04.2016, 07:15
WoodHead, Здравствуйте. Можно использовать Delimiter и DelimitedText.
Delphi
1
2
3
cars := TStringList.Create;
cars.Delimiter := #13;        // Каждый элемент списка будет разделён переводом строки
cars.DelimitedText := MyText;
Так получите то, что нужно.
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
11.04.2016, 07:49  [ТС]
Hikaru, думаю, вы меня неправильно поняли. В вашем коде происходит замещение того текста, который уже есть в StringList. А мне нужно к существующему тексту в списке добавить новый текст.

Добавлено через 2 минуты
ZfoxAK, всё равно не догоняю. Можно пример?
0
87 / 30 / 19
Регистрация: 16.01.2015
Сообщений: 250
11.04.2016, 08:20
WoodHead,
Цитата Сообщение от WoodHead Посмотреть сообщение
всё равно не догоняю. Можно пример?
то-что я написал.
Цитата Сообщение от WoodHead Посмотреть сообщение
нужно к существующему тексту в списке добавить новый текст.
Ну тогда вот так:
Delphi
1
cars.DelimitedText := cars.Text;
Но столкнулся с проблемой, перенос строки это #10#13. А Delimiter принимает только один Char. Так что пока не придумал, как указать разделителю "перенос строки".
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
11.04.2016, 08:35
Цитата Сообщение от WoodHead Посмотреть сообщение
всё равно не догоняю.
Что именно?

Добавлено через 4 минуты
Цитата Сообщение от Hikaru Посмотреть сообщение
Но столкнулся с проблемой, перенос строки это #10#13. А Delimiter принимает только один Char.
Так заменит

Добавлено через 30 секунд
вот пример
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.04.2016, 08:39
Цитата Сообщение от Hikaru Посмотреть сообщение
перенос строки это #10#13.
Вообще-то #13#10
А откуда берется текст с этими символами?
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
11.04.2016, 08:55  [ТС]
Hikaru, вы опять заменяете весь текст.
Delphi
1
cars.DelimitedText := cars.Text;
Ещё раз подчёркиваю, что текст в списке уже есть, его мне удалять не требуется, а нужно только добавить новый текст с разделением по строкам списка.
ZfoxAK, не догоняю, как применить Delimeter, если мне нужно добавить (не заменить) текст в список. В примерах выше текст списка заменяется.
Puporev, это результат работы функции по формированию полей класса с строковом виде. Т.е. MyText в примере имеет тип string. Вот в качестве разделителей и сделал, как мне показалось, естественно #13#10.
0
87 / 30 / 19
Регистрация: 16.01.2015
Сообщений: 250
11.04.2016, 08:57
Цитата Сообщение от Puporev Посмотреть сообщение
Вообще-то #13#10
, спасибо.
ZfoxAK, Да, сделал со StringReplace.
WoodHead, Держи
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
text : TStringList;
s : string;
begin
  text := TStringList.Create;
  text.Add(memo1.Text);
  s := StringReplace(text[0], #13#10, '|;|', [rfReplaceAll]);
  text.Delimiter := ';';
  text.QuoteChar := '|';
  text.DelimitedText := s;
end;
end.
0
 Аватар для AHBAR
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,141
11.04.2016, 09:01
WoodHead, почему бы не создать второй Стринглист? потом сделать цикл и добавлять в конец первого СтрингЛиста содржимое второго построчно
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button1Click(Sender: TObject);
var
list1,list2:TStringList;
i:integer;
begin
list1 := TStringList.Create;
list1.Add('строка 0 исходного текста');
list1.Add('строка 1 исходного текста');
list1.Add('строка 2 исходного текста');
 
list2 := TStringList.Create;
List2.Text := memo1.Text;
 
for i := 0 to list2.Count-1 do
    list1.Add(list2[i]);
 
Memo2.Text := list1.Text;
 
list1.Free;
list2.Free;
 
end;
Вложения
Тип файла: rar list.rar (163.0 Кб, 13 просмотров)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.04.2016, 09:01
Delphi
1
text.QuoteChar := '|';
Это зачем здесь? Чтобы это применить нужно сначала ограничить этим символом строки, содержащие пробелы.
0
87 / 30 / 19
Регистрация: 16.01.2015
Сообщений: 250
11.04.2016, 09:03
Цитата Сообщение от WoodHead Посмотреть сообщение
текст в списке уже есть, его мне удалять не требуется, а нужно только добавить новый текст с разделением по строкам списка.
Не пойму тогда, извините. В строках списка сделать ещё списки? Что-то тут не так.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.04.2016, 09:04
Цитата Сообщение от WoodHead Посмотреть сообщение
MyText в примере имеет тип string. Вот в качестве разделителей и сделал, как мне показалось, естественно #13#10.
А почему не строковый массив или список?
0
87 / 30 / 19
Регистрация: 16.01.2015
Сообщений: 250
11.04.2016, 09:06
Цитата Сообщение от Puporev Посмотреть сообщение
Это зачем здесь? Чтобы это применить нужно сначала ограничить этим символом строки, содержащие пробелы.
Без text.QuoteChar := '|'; разделяет по пробелам а не по переносам.
В stringReplase ограничил, нет?
s := StringReplace(text[0], #13#10, '|;|', [rfReplaceAll]);
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.04.2016, 09:10
Hikaru, Извиняюсь, не заметил.
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
11.04.2016, 09:13  [ТС]
AHBAR, второй стринглист - это первое, что пришло в голову. Показалось, что можно решить элегантней, без привлечения лишних сущностей.
Можно ещё передавать список по ссылке в процедуру и заполнять список уже в ней. Но это тоже показалось как-то неизолировано. То есть процедура другого класса что-то добавляет в список, о котором ничего не знает. Проще отдавать строку с нужными данными.
Puporev, если передавать массив или список, то появляется код с циклами. Я думал, что StringList уже содержит необходимые методы для решения моей задачи.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.04.2016, 09:14
Цитата Сообщение от WoodHead Посмотреть сообщение
то StringList уже содержит необходимые методы для решения моей задачи.
Так это и есть список строк.
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
11.04.2016, 09:20  [ТС]
Hikaru, нет, не в строках списка сделать списки. Есть список. В нём все разбито на строки. Нужно добавить в этот список текст так, чтобы он также был разбит на строки.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.04.2016, 09:21
Цитата Сообщение от WoodHead Посмотреть сообщение
Нужно добавить в этот список текст
Вот про это я и спрашивал, откуда он берется и в каком виде.
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
11.04.2016, 09:26  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Вот про это я и спрашивал, откуда он берется и в каком виде.
Я же выше написал "это результат работы функции по формированию полей класса с строковом виде. Т.е. MyText в примере имеет тип string. Вот в качестве разделителей и сделал, как мне показалось, естественно #13#10.".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.04.2016, 09:26
Помогаю со студенческими работами здесь

Объявление TStringList(Of Structure): как добавить новый элемент?
Structure strUsers Name as string Fio as string Id as integer Public sub New(val1 as string, val2 as string, val3 as...

Добавить дату типа текст в access
String b=DateToStr(Date()); ADOQuery2->SQL->Clear(); ADOQuery2->SQL->Add("insert into table( date)");// тип поля (текстовое) ...

Неясности с TStringList. Как найти наибольший элемент в TStringList?
Добрый день. Проблема следующая: мне надо в TStringList найти самую длинную строчку. Пытаюсь проверять по Length(sl) > Length(sl) - не...

Добавить текст в список
Ребята я вообще запутался помогите чайнику плиз есть переменная $_SESSION."<br>" в которую поступает товар и его цена при нажатии на...

Не получается добавить значение переменной h типа float в список
Помогите найти ошибку. Есть вот такой код на Python. Но не получается добавить значение переменной h типа float в список. Ошибка ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru