Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: 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

disillusion (статус: Посетитель), 11 апреля 2012, 00:41 [#1]:

Здравствуйте, Александр Николаевич!
Нет. Так не пойдет, по той причине, что мне нужно сохранить строковую переменную нетронутой, для будущих действий над ней.
Создавать еще одну переменную не рационально, и не очень красиво.
Так что в любом случае спасибо за Ваш ответ.
Подожду еще решений...
P.S: Хотелось бы как-то исправить мой код.
ANBsoft

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

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™

min@y™ (статус: Доктор наук), 11 апреля 2012, 13:01 [#4]:

Цитата (disillusion):

Спасибо Вам за то что вы есть! Как всегда безупречно! Чтоб я без Вас делал... ^^

Самое интересное, что ты будешь делать, когда я сдохну...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
disillusion

disillusion (статус: Посетитель), 11 апреля 2012, 13:27 [#5]:

min@y™: Самое интересное, что ты будешь делать, когда я сдохну...

Зачем так жестоко?
Конечно я буду сам как-то решать проблему. Куда я тогда денусь? Просто на это уйдет намного больше времени. А сейчас нет совсем времени на поиски решений. Я конечно могу написать какой-то говно-код, но все же хочется как-то стремиться к красоте.
Где же еще поучишься красоте? Конечно только у специалистов своего дела.
А за помощь Вам человеческое спасибо!
Для Вас возможно это ничего не стоит, а для таких новичков в этом деле как я это значимый вклад.
min@y™

min@y™ (статус: Доктор наук), 11 апреля 2012, 13:51 [#6]:

Цитата (disillusion):

Для Вас возможно это ничего не стоит

То, что я пишу тут для людей бесплатно, делается исключительно для гимнастики мозгов перед основной работой.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

18 апреля 2012, 17:04: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Алгоритмы, преобразования модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.04 сек.