|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
выбор цикла (while или repeat)?
Добрый день. Есть следующий код:
Код:
procedure TForm1.Button1Click(Sender: TObject); var DataIn,DataOut: TStringList; i,s: integer; Data: string; (*первые три строки из МЕМО1 переделанные в одну строку из 3-х слов*) begin DataIn := TStringList.Create; (*начальный массив строк из МЕМО1*) DataOut := TStringList.Create; (*финишный накопитель строк типа СТЕК*) DataIn.AddStrings(Memo1.Lines); (*копируем из МЕМО1 все строки*) s := DataIn.Count; (*начальное значение кол-ва строк в ПЕРЕМ*) (*вот этот код надо ввести в цикл*) (*вызов процедур*) CopyStrings(DataIn, Data); (*скопировали первые три строки из DataIn в Data как одну строку*) DataOut.Insert(0, Data); (*перекинули строку в накопитель строк*) DelStrings(DataIn); (*удаление первых 2-х строк из ПЕРЕМ DataIn*) Memo2.Text := DataOut.Text; (*контрольный просмотр результата*) DataIn.Free; DataOut.Free; end; ввод строк в МЕМО1: мама папа бобо огого еще больше ничего вывод строк в МЕМО2: мама папа бобо бобо огого еще еще больше ничего на текущий момент просто выводятся "мама папа бобо" а дальше остановка По отдельности все процедуры (CopyStrings и DelStrings) работают как надо никак не пойму как все это дело ввести в цикл |
#2
|
||||
|
||||
Нет разницы. Просто у While в условии будет стоять знак">", а в Repeat "=".
|
#3
|
||||
|
||||
На самом деле есть, репит выполняется минимум один раз.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
А простое копирование строк из поля в поле не пойдет?
Код:
procedure TForm1.Button1Click(Sender: TObject); var I, J, K, L: Byte; TmpStr: String; begin I := Memo1.Lines.Count; J := 0; L := 2; while J < I do begin TmpStr := ''; for K := J to L do TmpStr :=TmpStr +' '+ Memo1.Lines[K]; Memo2.Lines.Add(TmpStr); J := J + 2; L := L + 2; end; end; P.S.: а в Memo1 всегда четное количество строк? Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. Последний раз редактировалось Kailon, 27.06.2012 в 00:25. |
#5
|
|||
|
|||
нет, простое копирование не пойдет
вот и подсказанное решение Код:
begin i := 0; while i < T1.Count do begin str := ''; for j := i to min(i + step - 1, T1.Count - 1) do str := str + T1.Strings[j] + ' '; T2.Add(trim(str)); i := i + (step-1); end; |