Окно результатов Pascal

Я написал программу, которая объединяет два одномерных массива, содержащих имена. Я печатаю список arr1, arr2 и arr3.

Я использую Lazarus Free Pascal версии 1.0.14. Мне было интересно, знает ли кто-нибудь, как разбить результаты в dos-подобном окне, потому что список настолько длинный, что я могу видеть только несколько последних имен в возвращаемых результатах. Остальные пролетают слишком быстро, чтобы их можно было прочитать.

Я знаю, что могу сохранить результаты в файл, а также использую команду задержки, но хотел бы знать, есть ли способ как-то сломать результаты или замедлить их или даже отредактировать консоль вывода?

Я ценю вашу помощь.


person Maz    schedule 13.11.2017    source источник
comment
Напишите несколько строк, а затем запросите взаимодействие с пользователем. Нравится Write('Press [Enter] to continue ...'); ReadLn;   -  person LU RD    schedule 13.11.2017
comment
Не плохой вариант спасибо! К сожалению, он все еще обрезается, но это намного лучше, чем без вашего предложения. Возможно, мне все-таки придется экспортировать в файл. Еще раз спасибо!   -  person Maz    schedule 13.11.2017


Ответы (2)


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

Вместо этого вам нужен инструмент, который вы включаете в свою программу, чтобы разбить вывод на страницы, если и когда вы того пожелаете. Такие инструменты известны как пейджеры терминала, а базовый инструмент, поставляемый с Windows, называется more. Вы выполняете свою программу и передаете вывод в программу more. Как это:

C:\SomeDir>MyProject.exe <input_args> | more
person David Heffernan    schedule 13.11.2017
comment
Нет, это не вопрос программирования, поэтому я не включил код в исходный пост. Я думаю, что вы можете передавать вещи только при использовании среды unix. Я использую cmd в Windows. Но спасибо за ваш комментарий. - person Maz; 14.11.2017
comment
Неа. Это прекрасно работает в Windows. Windows поддерживает конвейер, а cmd использует тот же синтаксис, что и *nix. И то, что я написал, было не комментарием, а ответом. Это действительно ответ на вашу проблему. Если вы хотите стать более продвинутым, вы можете использовать инструмент GNU less, который (по иронии судьбы) похож на более продвинутую версию more. Не входит в стандартную комплектацию Windows, но вы можете легко получить ее из разных мест. Я использую его ежедневно. - person David Heffernan; 14.11.2017

Вы можете изменить код вашего цикла следующим образом:

скажем, вы печатаете результаты с помощью следующего цикла:

for i:=0 to 250 do
  WriteLn(ArrUnited[i]);

вы можете заменить его на:

for i:=0 to 250 do
  begin
    WriteLn(ArrUnited[i]);
    if (i mod 25) = 24 then //the code will wait for the user pressing Enter every 25 rows
      ReadLn;
  end;

На будущее пожалуйста! опубликуйте MCVE в своих вопросах, иначе всем придется догадываться, какой у вас код.

person asd-tm    schedule 14.11.2017