Разбить текст на абзацы

Есть текст в Memo1.Text напечатанный в одну строчку. Пример текста:

Все люди любят мечтать. Особенно в детстве. И это очень хорошо. История заветной детской мечты. ставшей явью. Далее в обзоре.

Как разбить текст по три предложения в строке и поставить между ними абзац ? Что бы на выходе в Memo1.Text был результат:

Все люди любят мечтать. Особенно в детстве. И это очень хорошо.

История заветной детской мечты. ставшей явью. Далее в обзоре.

Додумалась пока что как разбить на отдельные предложения. Будет вот так:

var i:integer;
    s:string;
begin
s:=Memo1.Text;
i:=2;
while i<length(s) do
if(s[i]=' ')and(s[i-1] in ['.'])then
 begin
  insert(#13#10,s,i+1);
  i:=i+1;
 end
else i:=i+1;
Memo1.Text:=s
end;

Ответы (1 шт):

Автор решения: MBo
var
  s, ss: string;
  sl: TStringList;
  i: integer;
begin
  s := 'Все люди любят мечтать. Особенно в детстве. И это очень хорошо. История заветной детской мечты. ставшей явью. Далее в обзоре. qq. pp';
  sl := TStringList.Create;
  sl.Delimiter := '.';
  sl.StrictDelimiter := true;
  sl.DelimitedText := s;
  ss := '';
  for i := 0 to sl.Count - 1 do begin
    if Length(sl[i]) > 0 then
      ss := ss + sl[i] + '.';
    if i mod 3 = 2 then begin
      Memo1.Lines.Add(ss);
      Memo1.Lines.Add('');
      ss := '';
    end;
  end;
  if sl.Count mod 3 <> 0 then
      Memo1.Lines.Add(ss);
  sl.Free;
→ Ссылка