Цветной вывод терминала из Fortran
моя программа выводит состояние вычислений на терминал и включает в себя довольно много информации. Я хотел бы, если это возможно, части цветового кода текста.
Я видел, как это можно сделать в Bash и c++, ссылаясь на потоки на этом сайте. Однако я не смог использовать ничего из этого для достижения того же результата в Fortran (modern). Например, я попробовал этот пример кода, который, как я думал, должен работать:
PROGRAM test
PRINT*, 'A great color is 3[95m pink 3[0m.'
END PROGRAM test
Я ожидал бы выхода быть "большим цветом-розовый", где розовый-розовый. Вместо этого я получаю "отличный цвет - 33[95m pink 33[0m". Я не понимаю, чего мне не хватает.
если я заменю строку печати в коде на: CALL EXECUTE_COMMAND_LINE ("echo" отличный цвет - 33[95m pink 33[0m.'") затем я получаю результат по желанию. Однако я не хотел бы продолжать вызывать echo из моего кода. Есть ли способ получить цветной выход?
спасибо!
4 ответов
представление escape-символа как "\033", похоже, не работает для вас. У меня нет fortran, чтобы проверить, но вы можете попробовать явно использовать символ вместо бегства в стиле c, вызвав char
функция преобразования, т. е. сделать фактический символ, вызвав char(27)
и используйте его в выходную строку в правильных местах.
Это старый вопрос, но я решил, что брошу свой ответ, если кто-нибудь придет позже (как я это сделал), ища ответ на это.
у меня была аналогичная проблема, как и у вас, пытаясь заставить escape-последовательности работать. Я пошла к man-страница для gfortran. поиск "escape" приведет меня к опции компилятора "- fbackslash". С мужской страницы:
изменить трактовку символы в строковых литералах от один символ обратной косой черты для escape-символов "C-style". Этот следующие комбинации развернуты "\a", "\b", "\f", "\n", " \r", "\t"," \v", " \ "и" \0 " для предупреждения символов ASCII, backspace, подача формы, новая строка, возврат каретки, горизонтальная вкладка, вертикальная вкладка, обратная косая черта и ноль соответственно. Кроме того, "\x " nn,"\u " nnnn и "\U " nnnnnnnnnn (где каждый n-шестнадцатеричная цифра) переводятся в символы Юникода, соответствующие указанным кодовым точкам. Все другой комбинации символов, которым предшествует\, являются нерасширенными.
Итак, чтобы получить escape-последовательности для работы в Fortran, все, что нам нужно сделать, это скомпилировать с этой опцией. Единственное, что отличается, - это то, что мы должны использовать шестнадцатеричные числа вместе с x вместо восьмеричных чисел. В этом конкретном случае вместо 3
мы используем:\x1B
. Например, PRINT *, "\x1B[31mThis text is red.\x1B[0m
напечатает текст красным цветом.
Я думаю, что этот метод определенно предпочтительнее, чем объединение группы индивидуально-определенные символы, каждый раз, когда мы хотим использовать цвета.
Если вы компилируете с ifort, вам нужно скомпилировать с помощью "- assume bscc", только тогда вы можете использовать
PRINT*, 'A great color is 3[95m pink 3[0m.'
кодексы:
[90m=dark grey [30m=black
[91m=peach [31m=red
[92m=light green [32m=green
[93m=light yellow [33m=yellow
[94m=light blue [34m=blue
[95m=pink [35m=purple
[96m=light aqua [36m=aqua
[97m=pearl white
Я только что наткнулся на правила модуль / библиотека, которая, кажется, делает именно то, что вы хотите. Я еще не использовал его, но скоро сделаю это, так как форматирование вывода терминала из моих программ Fortran было бы очень полезно.