| 
| 
 | Вопрос # 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 » Алгоритмы, преобразования модератором Ерёмин А.А. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |