STROUTF.PAS

{* WriteLN выводит в строку, а не в файл *}

Unit STROUTF;
Interface
Implementation
Begin
 writeln('Как заставить паскалевскую процедуру Write (Writeln) выводить не на экран или файл, а в строку ');
End.

Program pas;

Uses STROUTF.pas; {* Эту строку можно удалить *}
Uses WinDos, Strings; {* Вызов внешних функций *}
Function StrOutFunc(
Var {* Необходимые переменные *}
  F                                                    : Text);
  Begin
  With TTextRec(F) Do
  Begin
  Buffer[BufPos] := #0;
  BufPos := 0; { Если удалить данную строку, то над результатами }
  { нескольких операторов Write будет производиться }
  { конкатенация. Для очистки следует повторно      }
  { вызвать AssignStr                               }
  StrOutFunc := 0;
Var {* Объявление переменных *}
  F                  : Text);
  Begin
  StrClrFunc := 0;
Var {* Объявление переменных *}
  F                                          : Text);
  Begin
  with TTextRec(F) Do
  Begin
  Mode := fmOutput;
  BufSize := SizeOf(TTextBuf);
  BufPos := 0;
  BufPtr := @Buffer;
  CloseFunc := @StrClrFunc;
  OpenFunc := @StrClrFunc;
  InOutFunc := @StrOutFunc;
  FlushFunc := @StrOutFunc;
  Name[0] := #0;
  Buffer[0] := #0;
Var {* В работе нам потребуются переменные: *}
  F              : Text);
  Begin
  GetStr := StrPas(TTextRec(F).Buffer);
Var {* В работе нам потребуются переменные: *}
  T : Text;
  Begin
  AssignStr(T);
  Write(T, 'Hallo', Pi / 2 : 12 : 8);
  Writeln(GetStr(T));
  End......