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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2019, 09:04   #1
Alex711
Пользователь
 
Регистрация: 21.09.2018
Сообщений: 99
По умолчанию Как разделить текстовую строку

Здравствуйте, есть строка, например:
ljkhhuIUYyhiygYGY765877............ ................................... и т.д.
Строка больше 500 символов.
Как разделить её на строки по 10 символов.
То есть чтобы получилось:
ljkhhuIUYy
hiygYGY765
877.......
и т.д.
Использую Delphi 7
Если есть возможность, дайте пожалуйста кусок кода.
Заранее благодарю.
Alex711 вне форума Ответить с цитированием
Старый 07.04.2019, 09:17   #2
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Код:
procedure TForm17.Button1Click(Sender: TObject);
var
  s: String;
begin
  Memo1.Clear;
  s := 'ljkhhuIUYyhiygYGY765877............ ...................................';
  while Length(s) > 0 do
  begin
    Memo1.Lines.Add(Copy(s, 1, 10));
    Delete(s, 1, 10);
  end;
end;
Shouldercannon вне форума Ответить с цитированием
Старый 07.04.2019, 09:32   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вот любители курочить строку удалениями, да еще в цикле. Это же говнокод чистой воды ) Например так гораздо эффективней
Код:
for i:=0 to (Length(s)-1) div 10 do Memo1.Lines.Add(Copy(s, i*10+1, 10));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.04.2019, 11:15   #4
leoparrd
Заблокирован
 
Регистрация: 27.08.2010
Сообщений: 37
По умолчанию

Но вообще-то вопрос был как разделить строку, на строки, без всяких там мемо
А тут вроде бы как по моему тупому разумению, надо попросту поставить знаки конца строки через каждые 10 символов
Мне трудно спорить с авторитетами, тем более админами...
И потому я внесу дополнение...
Вы используете в качестве буфера Memo (в моём предложении это строка.) И дело вот в чём. Чем больше будет будет сечений, тем медленнее будет работать код. А всё потому что каждое действие отображается. Поэтому всегда, В любом случаем нужно ставить блокирующие скобки компонента.
BeginUpdate и Endupdate
И Copy Это второй тормоз

Последний раз редактировалось leoparrd; 07.04.2019 в 11:21.
leoparrd вне форума Ответить с цитированием
Старый 07.04.2019, 11:22   #5
Alex711
Пользователь
 
Регистрация: 21.09.2018
Сообщений: 99
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Вот любители курочить строку удалениями, да еще в цикле. Это же говнокод чистой воды ) Например так гораздо эффективней
Код:
for i:=0 to (Length(s)-1) div 10 do Memo1.Lines.Add(Copy(s, i*10+1, 10));
Спасибо, то что надо, только почему-то на "весы" не могу кликнуть.
Alex711 вне форума Ответить с цитированием
Старый 07.04.2019, 12:41   #6
leoparrd
Заблокирован
 
Регистрация: 27.08.2010
Сообщений: 37
По умолчанию

Alex711
Ну-ну. Попомните мои слова... Вот как подрежет Memo ваши данные... Сами скулить будете. Не верите? Ну хорошо.
Возьмите memo и попробуйте загрузить в него текст, 300 - 400 кило... Если и загрузит что-то то посмотрите где срежет.
И запомните. Ни один визуальный компонент не предназначен для обработки информации. Только для отображения.
Для обработки существует ListString Вот с ним надо работать. Хотя и он ограничен... Тут уж я посоветовал бы вам поток. Или ручное выделение памяти.
Если вы считаете что я даю заумные советы или как любят выражаться админы и модеры - говносоветы... то вам в область анализа и обработки информации соваться нечего.
А то что вы с таким восторгом приняли недалеко ушло от первого примера, то что модер обозвал говнокодом. Свой пример я не стал приводить по той причине, что вам судя по всему это не надо.
leoparrd вне форума Ответить с цитированием
Старый 07.04.2019, 13:33   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

BeginUpdate и Endupdate конечно, кто спорит, если для отображения. Еще лучше стринглист и потом целиком в мемо. У ТС же речь же скорее всего об этом, а не обработке гигостроки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.04.2019, 14:10   #8
leoparrd
Заблокирован
 
Регистрация: 27.08.2010
Сообщений: 37
По умолчанию

Никаких Memo
только ричедит. Там хоть ограничение снять можно
Вашему же коду куча возражений.
Человек задал вопрос.
500 символов разделить на строки по 10
Это 100 строк.
Вы пишите (Length(s)-1)
Это 100 раз будет вызываться куча действий. Зачем делать 100 раз, то можно сделать 1 раз
Вы вызываете 100 раз Copy
При этом она 100 раз создаёт собственный буфер и 100 раз запускает собственный цикл

А если не 100 а больше 1000?


Почем просто не взять и не
1 создать буферную строку.
2 Запустить цикл (один единственный)
3 наращивать буферную строку данными из исходной, попутно считая всё время до 10
4 как только 10 к буферной строке добавить D и A
5 Продолжать до конца строки строки, длина которой задаётся один раз.

Это аналог функции Copy
Но всё происходит один раз и за один цикл.

На выходе буферная строка.

Если её добавить в компонент рич или список, она сама рассыпется на строки.

И работать это будет намного быстрее, когда строк будет 100 000 и больше. И более эффективней, если будет введён поток


А теперь скажите, почему вы, модератор, давите на меня своими регалиями и любое моё возражение это куча минусов в репутации и бан, если я справедливо замечаю что подобные действия - тупость тупого.

Вы считаете это глубоким оскорблением администрации.

Сама же администрация набирает репутацию всякой глупостью и при этом налево и направо сыплет унижения и оскорбления... И при этом я не имею право поставить минус.
А мне можно сразу 1000 минусов.
Это извините бред. Репутация - это мозги. Я получаю её за знания и умения. которых у меня больше чем у вас. А вы меня выставляете идиотом и за оскорбление это не считаете.
leoparrd вне форума Ответить с цитированием
Старый 07.04.2019, 15:12   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
А теперь скажите, почему вы, модератор, давите на меня своими регалиями и любое моё возражение это куча минусов в репутации и бан
Бред какой-то. Где это я давил на leoparrd, минусовал и в бан отправлял?
Цитата:
Вы пишите (Length(s)-1)
Это 100 раз будет вызываться куча действий. Зачем делать 100 раз, то можно сделать 1 раз
Это как раз один раз посчитается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 07.04.2019 в 15:20.
Аватар вне форума Ответить с цитированием
Старый 07.04.2019, 15:44   #10
leoparrd
Заблокирован
 
Регистрация: 27.08.2010
Сообщений: 37
По умолчанию

Не вы, так кто другой. Вы в администрации и отвечаете за неё.
Раз на вас нашито столько лампасов, то что будет если я сведу более половины ваших ответов к нулю?
Я не получу за это ни шиша или по шее от ваших коллег. А вы получить кучу репутаций, хотя не заслужили.
Ваши ответы - полумеры и работают частично.
Вот простейший пример
Приходит супер-пупер в магаз.
Мне говорит, НУЖЕТ СУПЕРПУПЕР ТЕЛЕК. 4k называется.
Продавец перед ним расстелился, самы дорогую модель всучил..
Пришёл домой, выпендривается. И соседа бедняка, но учёного пригласил похвастаться.
А сосед ему Это не 4K, а всего лишь Ультра эчь-ди
А 4K пока в природе не существует. А 4K это бренд такой вешают для лохов вроде тебя.
Вот что богатею делать?
Что делать человеку, который получил якобы помощь от дяди с лампасами,
а какой-то мудак вроде меня ему тюкает что он лоханулся по полной программе?
Улавливаете проблему?

А если человеку это нужно не на один раз, то с проблемами вскорости он обязательно столкнётся.
leoparrd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести byte в текстовую строку бинарными данными Krasi Помощь студентам 1 08.10.2015 15:42
Перевод числа в текстовую строку, исправить код (FASM) Tanchik0611 Помощь студентам 2 21.10.2012 16:29
как сформировать текстовую строку? Volodymyr Microsoft Office Access 6 31.07.2011 12:49
excel разделить текстовую строку в ячейке на несколько ячеек!!! Bandikoot Microsoft Office Excel 2 27.04.2011 15:05