Устройство FreePascal CRT предотвращает перенаправление вывода

У меня возникла следующая проблема с модулем FreePascal CRT: после добавления модуля в проект (например, в простое консольное приложение, которое пишет "Hello World" с помощью WriteLn()), вывод программы отображается в CMD Windows, но не может быть перенаправлен.

Чтобы быть более подробным, следующий исходный код

program project1;

{$mode objfpc}{$H+}

uses
  Classes;

begin
  WriteLn('TestOutput');
end.      

выводит "TestOutput" в командную строку Windows и bash работает в Windows. Команда

project1.exe > test.txt

создает файл test.txt с содержанием TestOutput,

После того, как блок CRT добавляется в проект (т.е. uses Classes, CRT;), строка все еще печатается на консоли, но не может быть перенаправлена ​​в файл или использована в контексте консоли (файл и переменная будут пустыми).

У кого-нибудь есть решение для такого поведения?

Может быть и хуже, но для удобства было бы здорово иметь варианты HighVideo() и установка позиции курсора.

С наилучшими пожеланиями

Alex

1 ответ

Очевидное решение - не импортировать Crt, поскольку весь смысл Crt не является линейным текстовым выводом (позиционирование курсора).

Классически можно отключить ЭЛТ с помощью

assign(output,'');
rewrite(output);

Вы можете попытаться связать этот код с каким-либо параметром командной строки, чтобы сделать вывод пригодным для конвейера. Но чтобы это выглядело разумно, лучше также использовать другой (не цветной, не курсорный) выходной код.

Другие вопросы по тегам