|
Вопрос # 6 066/ вопрос решён / |
|
Приветствую, уважаемые эксперты!
Нужна помощь в решении следующей проблемы:
Есть код:
for i:=0 to Length(binMsg) do
if (i+1 mod 512 = 0) then
mmoBinMsg1.Lines.Text := mmoBinMsg1.Lines.Text + #13#10
else
mmoBinMsg1.Lines.Text := mmoBinMsg1.Lines.Text + IntToStr(i) + binMsg[i];
Смысл его таков:
Нужно из строковой переменной binMsg перегнать текст в RichEdit, и после каждого 512 символа сделать перенос строки.
Проблема в том что текст весь копируется в RichEdit, а перенос строки никогда не происходит.
До меня никак не доходит в что не так.
 |
Вопрос задал: disillusion (статус: Посетитель)
Вопрос отправлен: 10 апреля 2012, 22:30
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: ANBsoft
Здравствуйте, disillusion!
Как-то так:
mmoBinMsg1.Lines.Clear;
while Length(binMsg) > 512 do begin
mmoBinMsg1.Lines.Add(Copy(binMsg,1,512));
Delete(binMsg,1,512);
end;
if binMsg<>'' then mmoBinMsg1.Lines.Add(binMsg);
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 11 апреля 2012, 00:14
|
Ответ #2. Отвечает эксперт: min@y™
Ну, нетронутой, так нетронутой. И без лишнего перераспределения памяти (работать должно в разы быстрее).
procedure SplitText(const AText: string; ALines: TStrings);
var
Index, Len: Integer;
begin
Len:= Length(AText);
Index:= 1;
ALines.Clear();
while Index <= Len do
begin
ALines.Add(Copy(AText, Index, 512));
Inc(Index, 512);
end;
end;
// использование процедурки:
SplitText(binMsg, mmoBinMsg1.Lines);
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 11 апреля 2012, 08:12
Оценка за ответ: 5
Комментарий к оценке: Спасибо Вам за то что вы есть!
Как всегда безупречно!
Чтоб я без Вас делал... ^^
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 11 апреля 2012, 13:51; участников в обсуждении: 3.
|
disillusion (статус: Посетитель), 11 апреля 2012, 00:41 [#1]:
Здравствуйте, Александр Николаевич!
Нет. Так не пойдет, по той причине, что мне нужно сохранить строковую переменную нетронутой, для будущих действий над ней.
Создавать еще одну переменную не рационально, и не очень красиво.
Так что в любом случае спасибо за Ваш ответ.
Подожду еще решений...
P.S: Хотелось бы как-то исправить мой код.
|
|
ANBsoft (статус: Студент), 11 апреля 2012, 09:50 [#2]:
Еще один код привели, основная идея в том, что нужно добавлять строки через метод Add.
И не нужно гонять пустой цикл 511 раз из 512
for i:=0 to Length(binMsg) do
if (i+1 mod 512 = 0) then
Проще сразу увеличивать счетчик на 512
|
|
disillusion (статус: Посетитель), 11 апреля 2012, 12:37 [#3]:
немного исправил код под свои нужды и все чудесно заработало:
procedure SplitText(const AText: string; ALines: TStrings);
var
Index, Len: Integer;
begin
Len:= Length(AText);
Index:= 1;
ALines.Clear();
while Index <= Len-512 do
begin
ALines.Add(Copy(AText, Index, 512)+#13#10);
Inc(Index, 512);
end;
ALines.Add(Copy(AText, Index, 512));
end;
|
11 апреля 2012, 12:38: Статус вопроса изменён на решённый (изменил автор вопроса — disillusion)
|
min@y™ (статус: Доктор наук), 11 апреля 2012, 13:01 [#4]:
Цитата (disillusion):
Спасибо Вам за то что вы есть! Как всегда безупречно! Чтоб я без Вас делал... ^^
Самое интересное, что ты будешь делать, когда я сдохну...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
disillusion (статус: Посетитель), 11 апреля 2012, 13:27 [#5]:
min@y™: Самое интересное, что ты будешь делать, когда я сдохну...
Зачем так жестоко?
Конечно я буду сам как-то решать проблему. Куда я тогда денусь? Просто на это уйдет намного больше времени. А сейчас нет совсем времени на поиски решений. Я конечно могу написать какой-то говно-код, но все же хочется как-то стремиться к красоте.
Где же еще поучишься красоте? Конечно только у специалистов своего дела.
А за помощь Вам человеческое спасибо!
Для Вас возможно это ничего не стоит, а для таких новичков в этом деле как я это значимый вклад.
|
|
min@y™ (статус: Доктор наук), 11 апреля 2012, 13:51 [#6]:
Цитата (disillusion):
Для Вас возможно это ничего не стоит
То, что я пишу тут для людей бесплатно, делается исключительно для гимнастики мозгов перед основной работой.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
18 апреля 2012, 17:04: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Алгоритмы, преобразования модератором Ерёмин А.А.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|