可以调整输出文本的颜色到文本文件吗?

15 浏览
0 Comments

可以调整输出文本的颜色到文本文件吗?

我发现fprintf没有本能能力来调整输出文本的颜色,而cprintf通过"conio.h"使用也无法打印到文件(至少我找不到)。我希望能够在"data.text"文件中将fprintf输出的颜色调整为绿色。

static void cursor_position_callback(GLFWwindow* w, double x, double y)
{
    FILE *f = fopen("data.txt", "a");
    if (f==NULL)
    {
        printf("打开文件失败!\n");
    }
    fprintf(f,"%0.3f: 鼠标位置:%f %f(%+f %+f)\n",
           glfwGetTime(),
           x, y, x - cursor_x, y - cursor_y);
    cursor_x = x;
    cursor_y = y;
    fclose(f);
}

输出将用于一个涉及眼手追踪能力的实验中的鼠标跟踪数据。非常感谢您的时间。

0
0 Comments

在常见的做法中,单词“文本”经常被(误)用于更广泛的意义上。在C编程实践中,严格意义上的术语也经常被称为“纯文本”格式(与“富文本”格式和其他一些文本格式相对)。让我们来看看这个简单的演示程序:

#include 
#include 
int main(void)
{
    FILE* testfile;
    fprintf(stdout, "%c\x1b[31m",27);    
    fprintf(stdout, "===================TITLE=================\n");
    fprintf(stdout, "%c\x1b[0m", 27); 
    fprintf(stdout, "This is a plain text coloration test in C\n");
    if((testfile = fopen("test.txt", "r" )) == NULL){
        testfile = fopen("test.txt", "w" );
        if(testfile != NULL ){
            fprintf(testfile, "%c\x1b[31m",27);    
            fprintf(testfile, "===================TITLE=================\n");
            fprintf(testfile, "%c\x1b[0m", 27); 
            fprintf(testfile, "This is a plain text coloration test in C\n");    
            fclose(testfile);    
        }
    }
    return 0;
}

终端和shell可能会将ANSI/VT 100转义序列解释为颜色,只要fprintf写入stoutstderr,但如果它写入一个常规文件,那么文件中就会写入以下内容:

[31m===================TITLE=================

[0mThis is a plain text coloration test in C

问题的原因是,当将文本写入文件时,终端和shell无法解释ANSI / VT 100转义序列,因此将其作为普通文本写入文件。

解决方法是,可以使用特定的库或工具来实现将颜色应用于文本文件。这些库或工具可以解释ANSI / VT 100转义序列,并相应地调整文本的颜色。

0
0 Comments

问题的出现原因:

文件只是一系列字节的序列,它的内容从来没有颜色。颜色只会在显示信息时出现(在显示器上或者打印在纸上)。然而,如果读取文件的程序知道如何正确地对文件内容进行反应,那么显示的颜色选择可能会受到文件中的信息的影响。这实际上意味着你需要定义一个(或使用现有的)文件格式:文件内容可能被结构化和解释的规则。现在,要显示这个文件的程序必须查找对的出现,并在显示封闭的文本之前相应地改变控制台颜色。请注意,如果你想要显示的文本本身可能包含,你需要一些转义机制,例如决定<将表示一个文字<。

正如你所看到的,定义一个文件格式并不容易,你应该坚持使用已有的具有现有解析器的格式。

解决方法:

为了实现在文本文件中调整输出文本的颜色,需要定义一个文件格式,并编写一个程序来解析该文件并根据文件内容调整文本的颜色。以下是一个可能的解决方法的示例代码:

import re
def adjust_color(file_path):
    with open(file_path, 'r') as file:
        content = file.read()
        updated_content = re.sub(r'<(\w+)>(.*?)', r'\2', content)
    
    with open(file_path, 'w') as file:
        file.write(updated_content)
# 调用示例
adjust_color('text.txt')

上述代码中,我们使用正则表达式来查找文件中的对,并将其替换为相应的文本。然后,我们将更新后的内容写回到文件中。

请注意,这只是一个简单的示例,实际上,定义和解析文件格式可能会更加复杂,并且需要考虑到转义字符等其他因素。因此,建议在可能的情况下使用现有的文件格式和解析器。

0