用Fortran在Linux终端输出彩色文字
采用彩色的文字可以给出明显的提示,增加程序的易用性(例如采用“错误:压力出现负值” 比 “错误:压力出现负值”要醒目得多)。然而Fortran无法在命令行下直接输出彩色文字,不过通过调用系统函数可以解决这一难题。
通过参考http://bbs.stupc.org/thread-16335-1-1.html 关于echo命令的详解如下:
信息来源:
akaedu@akaedu.org
格式: echo \"\\033[字背景颜色;字体颜色m字符串\\033[0m\"
例如:
echo \"\\033[41;36m something here \\033[0m\"
其中41的位置代表底色, 36的位置是代表字的颜色
那些ascii code 是对颜色调用的始末.
\\033[ ; m …… \\033[0m
字背景颜色范围:40----49
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
字颜色:30-----------39
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
===========ANSI控制码的说明
\\33[0m 关闭所有属性
\\33[1m 设置高亮度
\\33[4m 下划线
\\33[5m 闪烁
\\33[7m 反显
\\33[8m 消隐
\\33[30m -- \\33[37m 设置前景色
\\33[40m -- \\33[47m 设置背景色
\\33[nA 光标上移n行
\\33[nB 光标下移n行
\\33[nC 光标右移n行
\\33[nD 光标左移n行
\\33[y;xH设置光标位置
\\33[2J 清屏
\\33[K 清除从光标到行尾的内容
\\33[s 保存光标位置
\\33[u 恢复光标位置
\\33[?25l 隐藏光标
\\33[?25h 显示光标
akaedu@akaedu.org
格式: echo \"\\033[字背景颜色;字体颜色m字符串\\033[0m\"
例如:
echo \"\\033[41;36m something here \\033[0m\"
其中41的位置代表底色, 36的位置是代表字的颜色
那些ascii code 是对颜色调用的始末.
\\033[ ; m …… \\033[0m
字背景颜色范围:40----49
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
字颜色:30-----------39
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
===========ANSI控制码的说明
\\33[0m 关闭所有属性
\\33[1m 设置高亮度
\\33[4m 下划线
\\33[5m 闪烁
\\33[7m 反显
\\33[8m 消隐
\\33[30m -- \\33[37m 设置前景色
\\33[40m -- \\33[47m 设置背景色
\\33[nA 光标上移n行
\\33[nB 光标下移n行
\\33[nC 光标右移n行
\\33[nD 光标左移n行
\\33[y;xH设置光标位置
\\33[2J 清屏
\\33[K 清除从光标到行尾的内容
\\33[s 保存光标位置
\\33[u 恢复光标位置
\\33[?25l 隐藏光标
\\33[?25h 显示光标
给出演示 Fortran 代码如下:
program color
implicit none
character*64::title
title='echo -e "\033[42;30m TEST \033[0m "'
call system(trim(title))
call system('echo -ne "\033[41;30m color \033[0m"')
call system('echo -ne "\033[42;31m color \033[0m"')
call system('echo -ne "\033[43;32m color \033[0m"')
call system('echo -ne "\033[44;33m color \033[0m"')
call system('echo -ne "\033[45;34m color \033[0m"')
call system('echo -ne "\033[46;35m color \033[0m"')
call system('echo -ne "\033[47;36m color \033[0m"')
call system('echo -e "\033[40;37m color \033[0m"')
call system('echo -ne "\033[30m color \033[0m"')
call system('echo -ne "\033[31m color \033[0m"')
call system('echo -ne "\033[32m color \033[0m"')
call system('echo -ne "\033[33m color \033[0m"')
call system('echo -ne "\033[34m color \033[0m"')
call system('echo -ne "\033[35m color \033[0m"')
call system('echo -ne "\033[36m color \033[0m"')
call system('echo -e "\033[37m color \033[0m"')
stop
end program
implicit none
character*64::title
title='echo -e "\033[42;30m TEST \033[0m "'
call system(trim(title))
call system('echo -ne "\033[41;30m color \033[0m"')
call system('echo -ne "\033[42;31m color \033[0m"')
call system('echo -ne "\033[43;32m color \033[0m"')
call system('echo -ne "\033[44;33m color \033[0m"')
call system('echo -ne "\033[45;34m color \033[0m"')
call system('echo -ne "\033[46;35m color \033[0m"')
call system('echo -ne "\033[47;36m color \033[0m"')
call system('echo -e "\033[40;37m color \033[0m"')
call system('echo -ne "\033[30m color \033[0m"')
call system('echo -ne "\033[31m color \033[0m"')
call system('echo -ne "\033[32m color \033[0m"')
call system('echo -ne "\033[33m color \033[0m"')
call system('echo -ne "\033[34m color \033[0m"')
call system('echo -ne "\033[35m color \033[0m"')
call system('echo -ne "\033[36m color \033[0m"')
call system('echo -e "\033[37m color \033[0m"')
stop
end program
在ubuntu8.04.1 32bit +Intel Fortran 10 测试通过 ,测试显示"\33"可能会出现问题,因此采用“\033"。
此外,由于此方法是通过调用系统函数完成,执行效率不高,不建议在数值计算中频繁使用。
以上代码是我自己编写,如果你有更好的改进方案或者发现错误,请与我联系。