Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#46: 2015-03-31 19:29:23 ЛС | профиль | цитата
nesco писал(а):
я бы рекомендовал переименовать компонент, к примеру, в RepeatChar
К примеру, StrRepeat
code_35425.txt
"Но это уже совсем другая история..."(с) и возможно следующий компонент .
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_35425.txt [1KB] [514]
Разработчик
Ответов: 26072
Рейтинг: 2122
#47: 2015-04-01 01:08:07 ЛС | профиль | цитата
Предлагаю прототип Java-функции str_pad -- str_pad.sha
карма: 22

0
файлы: 1str_pad.sha [4.2KB] [494]
Ответов: 8889
Рейтинг: 823
#48: 2015-04-01 09:56:33 ЛС | профиль | цитата
nesco, уж до кучи: если строка длинее установленной, по False/True разбить строку на кусочки, а в последний по необходимости добавить
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#49: 2015-04-01 11:31:38 ЛС | профиль | цитата
nesco, ну а почему не так ?
code_35430.txt
------------ Дoбавленo в 11.31:
Леонид писал(а):
разбить строку на кусочки
учитывая правила переноса ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_35430.txt [1.6KB] [355]
Ответов: 4622
Рейтинг: 746
#50: 2015-04-01 11:49:23 ЛС | профиль | цитата
Что это за любовь к сложению строк в циклах...
code_35431.txt
карма: 26

0
файлы: 1code_35431.txt [2.3KB] [574]
Разработчик
Ответов: 26072
Рейтинг: 2122
#51: 2015-04-01 11:53:31 ЛС | профиль | цитата
Tad писал(а):
ну а почему не так ?

Я просто сконвертировал готовый код. Можно и как ты предложил, но мне не хотелось бы использовать SetLength, КМК Copy будет предпочтительней. Подождем, что по этому вопросу скажет Netspirit
карма: 22

0
Ответов: 4622
Рейтинг: 746
#52: 2015-04-01 12:00:44 ЛС | профиль | цитата
По поводу? Если работа со строками ведется только с использованием операторов Delphi без сторонних функций, то никаких проблем.
карма: 26

0
Ответов: 16884
Рейтинг: 1239
#53: 2015-04-01 12:18:09 ЛС | профиль | цитата
Netspirit писал(а):
Что это за любовь к сложению строк в циклах
Никакой любви - производственная необходимость, т.к. nesco, в своём примере добавляет не символ, а строку (-. Так ему захотелось.
Netspirit, примерчик придумай для -= без цикла.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4622
Рейтинг: 746
#54: 2015-04-01 12:23:17 ЛС | профиль | цитата
А зачем без цикла? Тот же цикл, только Move() вместо присвоения. Если цикла нет и нужно просто несколько раз соединить строки - нет проблем.
Я имел в виду именно генерацию строки, состоящей из указанного количества одинаковых символов/подстрок. В этом месте:
while Length(half)<pad_to_go do half := half + padstring;

карма: 26

0
Ответов: 16884
Рейтинг: 1239
#55: 2015-04-01 12:44:55 ЛС | профиль | цитата
Netspirit, я тоже про это думал.
А вдруг кто-то захочет зеркало:
-=@@@nesco@@@=-
-=@Netspirit@=-
-=@@@@Tad@@@@=-
хотелок дохрена может быть. Я предложил реализовать компонентом SetLength просто процедуру "обрезания" строки до нужного размера, а Вы захотели ещё и увеличение. Увеличить, говорят можно, но только хирургическим путем.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26072
Рейтинг: 2122
#56: 2015-04-01 12:47:18 ЛС | профиль | цитата
Tad писал(а):
Так ему захотелось

Это не мне захотелось. Так работает стандартная функция str_pad PHP и Java
------------ Дoбавленo в 12.47:
Tad писал(а):
Я предложил реализовать компонентом SetLength просто процедуру "обрезания" строки(члена) до нужного размера

А я предлагаю добавить то, что уже имеется у всех, но не у нас
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#57: 2015-04-01 13:01:16 ЛС | профиль | цитата
nesco, это уже другой компонент.
Когда-то, на заре HiAsm, Amper выкладывал компонент, ЕМНИП, который назывался вроде StringOperations. Правда там "смешались вместе кони, люди", но идея была не так уж и плоха.
Нужен такой компонент.
Чтобы можно было и SetLength, и StrRepeat, и PadStr и много чего, что редко требуется, но требуется и из-за чего приходится "доставать" IC или лепить схему из нескольких компонент.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4622
Рейтинг: 746
#58: 2015-04-01 13:02:21 ЛС | профиль | цитата
Tad писал(а):
Я предложил реализовать компонентом SetLength просто процедуру "обрезания" строки

Так, давайте выясним задачи, а то тут что-то всё в одну кучу свалили
1) Та, для которой создана эта тема - "обрезание строки". То-есть, получить первые N символов указанной строки. Эту задачу выполняет у нас Copy. Но поскольку часто требуется получить именно первую часть, то я предлагаю для упрощения туда же добавить два метода doCopyFirst, doCopyLast и закончить тему SetLength. Необходимости "увеличения" строки тут нет.
2) Дополнение строки до указанной длины слева, справа, с обеих сторон указанным символом (строкой).
Для этого нужен отдельный компонент. Называем его StrPad, методы doPadLeft, doPadRight, doPadBoth, точки/свойства Length, FillChar(FillPattern). Можно ещё добавить свойство что делать, если строка превышает Length: обрезать, выдать неизменённую.

Tad писал(а):
А вдруг кто-то захочет
Это не относится к оглашенным выше задачам. Не помню, у нас есть что-то типа StrReverse? Тогда бы и это решалось.
карма: 26

0
Разработчик
Ответов: 26072
Рейтинг: 2122
#59: 2015-04-01 13:09:46 ЛС | профиль | цитата
Netspirit писал(а):
Называем его StrPad, методы doPadLeft, doPadRight, doPadBoth, точки/свойства Length, FillChar(FillPattern)

Не надо так делать, надо просто сделать один метод doOperation и установку типа преобразования в свойствах. Я предложил прототип уже готового компонента, достаточно его только засунуть в оболочку
------------ Дoбавленo в 13.09:
Netspirit писал(а):
у нас есть что-то типа StrReverse?

Нету, но можно сделать
карма: 22

0
Ответов: 4622
Рейтинг: 746
#60: 2015-04-01 13:14:00 ЛС | профиль | цитата
nesco писал(а):
надо просто сделать один метод doOperation
Как хочешь. Но можешь "голосовалку" объявить
------------ Дoбавленo в 13.13:
Tad писал(а):
Чтобы можно было ... и StrRepeat
Как раз выложил в Компонентах.
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)