我使用C ++将数据输出到Linux上的txt文件。 有没有办法用不同的颜色输出一行文本的一部分?
例如,我希望能够写入0.000瓦的红色。
这个模型的总功率使用:0.000瓦特
纯文本文件(* .txt)不支持任何方式的颜色。 您将不得不使用不同的格式,如RTF或HTML。
如果您愿意将ANSI终端转义码嵌入到您的文件中,那么当然可以。
这里是一个使用Ruby伪代码的例子。 (#{expr}语法只是用%s或%d格式化expr,然后将其插入到字符串中。
def colorize s, code "#{code}#{s}\e[0m" end def color s, n colorize s, "\e[#{31 + n % 7}m" end
你可以使用curses或者termcap,但是这会变得复杂得多,而且在今天是不必要的,因为每个Linux(和Mac)终端窗口都会吃掉ANSI代码而没有问题。
如果你通过less(1)查看这个文件或者直接输出,那么你会希望使用less -R
。
更新:C ++
#include <iostream> using namespace std; void color(const char *s, int n) { cout << "\e[" << (31 + n % 7) << "m" << s << "\e[0m"; } int main() { color("How now", 0); color(" brown cow", 1); color(" Now is the", 2); color(" time.", 3); cout << endl; return 0; }
和C99:
#include <stdio.h> void colorize(const char *s, const char *code) { printf("%s%s\e[0m", code, s); } void color(const char *s, int n) { char t[32]; sprintf(t, "\e[%dm", 31 + n % 7); colorize(s, t); } int main(void) { color("How now", 0); color(" brown cow", 1); color(" Now is the", 2); color(" time.\n", 3); return 0; }
最好的方法是通过curses库:
http://en.wikipedia.org/wiki/Curses_%28programming_library%29
如果你只是想做简单的,你可以使用代码
http://deathray.us/code/color_output.html
const char COL_RESET[] = "\x1b[0m"; const char RED[] = "\x1b[31m"; cout << RED << "Red looks good" << COL_RESET << endl;
更多信息: http : //en.wikipedia.org/wiki/ANSI_escape_code
有关ANSI转义码(有时也称为VT100转义码)的更多信息,请参阅http://en.wikipedia.org/wiki/ANSI_escape_code 。
如果你使用类似vim的东西来查看你的txt文件。 可以添加匹配特定颜色的特定单词的语法文件。 这种方法的好处是,你不必使用html标签等在txt文件本身内添加任何颜色信息。然而,颜色不会是便携式的,因为它在你的vim设置。
这取决于你在用你的文本文件做什么。 如果您使用的是cat
或more
(或甚至grep
,注意事项),或者直接输出到终端窗口,您可以通过使用ANSI颜色代码,如@DigitalRoss和其他几个建议颜色。 但是,如果你使用其他任何东西来查看文件,比如Vim,EMACS,gedit,Firefox等等,将不会有任何颜色,相反,在你的文本文件中会出现一些垃圾。
所以你的问题的答案是“是的,但是” :是的,有一种方法可以将颜色放在文本文件中,但除了直接显示在VT100兼容的终端上以外,它不起作用。 所以我不会使用控制代码作为我想给其他人的文本文件,因为我不知道他们将如何查看它,我真的怀疑他们会使用cat
。
但是,如果您打算将程序直接写入终端,请使用颜色代码前往城镇。 但是添加某种方法可能会很好,因为其他人可能希望将程序的输出重定向到文件而不必将其过滤掉。