Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2021, 07:16   #1
cutter47
Пользователь
 
Регистрация: 22.06.2020
Сообщений: 23
По умолчанию Проблема с StringReplace

Здравствуйте уважаемые, столкнулся с такой проблемой:
Есть некая программа, в ней в TStringList записываются строки из файла

Код:
SL0.LoadFromFile('data.txt');
Есть некие циклы, в которых происходит двойных пробелов на одиночные и а также двоеточие без пробела на двоеточие с пробелом, так же замена пробелов у Items внутри TStringList'a - меняю их на #13#10
Код:
For i:=0 to SL0.Count-1 do SL0.Strings[i]:=StringReplace(SL0.Strings[i],':',': ',[rfReplaceAll]);
For i:=0 to SL0.Count-1 do SL1.Add(SL0.Strings[i]);

For i:=0 to SL1.Count-1 do SL1.Strings[i]:=StringReplace(SL1.Strings[i],'  ',' ',[rfReplaceAll]);
For i:=0 to SL1.Count-1 do SL2.Add(SL1.Strings[i]);

For i:=0 to SL2.Count-1 do SL2.Strings[i]:=StringReplace(SL2.Strings[i],' ',#13#10,[rfReplaceAll]);
For i:=0 to SL2.Count-1 do SL3.Add(SL2.Strings[i]);

For i:=0 to SL3.Count-1 do SL4.Add(SL3.Strings[i]);
если выводить потом в Мемо,
Код:
For i:=0 to SL4.Count-1 do Form1.Memo1.Lines.Add(SL4.Strings[i]);
то все красиво и правильно, а если обращаться к Item'у из самого TStringList'a,
например так:
Код:
  ShowMessage(SL4[7]); // выводим 7-й Item из 4-го TStringList'a
получается такое - https://prnt.sc/xwefbd
печатает в две строки. Как сделать чтобы при замене внутри Items у TStringList'a пробелов на перенос каретки (#13#10) создавался новый Item ?

Спасибо за внимание.
Всем ответившим буду очень благодарен.

Последний раз редактировалось cutter47; 31.01.2021 в 07:40.
cutter47 вне форума Ответить с цитированием
Старый 31.01.2021, 18:01   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

работать (делать замены) не в каждой строчке (Item) а сразу ВЕСЬ текст.
Код:
sl.LoadFromFile(...);
s:=sl.Text;
s:=StringReplace(s,..., [rfReplaceAll]);
s:=StringReplace(s,..., [rfReplaceAll]);
sl.Text:=s;
Код:
sl.Text:=s;
sl1.Text:=s;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 31.01.2021, 18:16   #3
cutter47
Пользователь
 
Регистрация: 22.06.2020
Сообщений: 23
По умолчанию

Приветствую, в том то и дело что замена в тексте оччень-очень долгая на больших файлах ТХТ, пробовал с помошью нее до похода сюда. Толь что решил этот вопрос сам, всем большое спасибо, кто пытался помочь.
cutter47 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Stringreplace в запросе BROOKHUT БД в Delphi 7 29.05.2018 13:49
StringReplace проблема с регуляркой :( FleXik Общие вопросы Delphi 5 14.09.2013 22:36
Вопрос по StringReplace Lauri Общие вопросы Delphi 1 08.02.2013 19:15
StringReplace Painkiller_13 Общие вопросы Delphi 11 24.12.2012 22:25
StringReplace s1s1s1 Общие вопросы Delphi 12 28.03.2011 16:26