2016-05-06 10 views
0

fprintfには出力テキストの色を調整する本来の能力がなく、 "conio.h"で利用されているcprintfはファイルに印刷できません(とにかく見つけられない)。出力テキストの色をテキストファイルに調整できますか?

"data.text"ファイル内で、fprintfの出力を緑色に調整したいと考えています。

出力は、目の追跡機能を含む実験でマウス追跡データに使用されます。あなたのお時間をありがとうございました。

+4

テキスト・ファイルは、*テキスト*が含まれている、それは他の情報を持っていません。ファイル内の色は[ASNI/VT100エスケープコード](http://www.termsys.demon.co.uk/vtansi.htm)で保存できますが、生のエスケープシーケンスとして保存されます。ファイルの読み取りを行い、シーケンスを解析して処理します。また、シーケンスに対応していないプログラムで開かれた場合は、ユーザーが実際にテキストに関係のない「奇妙な」文字が埋め込まれているため、ファイルを読みにくくします。 –

答えて

3

ファイルは単なるバイトシーケンスです。その内容は決して色を持たない。色は、の情報を表示しているときにのみ表示されるものです(モニター上または紙に印刷するとき)。ただし、表示する色の選択は、ファイルを読み取るプログラムがファイルの内容に適切に反応する方法を知っている場合、ファイル内の情報の影響を受ける可能性があります。これは基本的には、のファイル形式を定義する(または既存のものを使用する)必要があることを意味します。ファイルの内容がどのように構造化され、解釈されるかに関する規則です。例えば、(StackOverflowの着色を無視し、これをテキストファイルに無色のテキストを表すことになっている):

Some of this text is <red>colored</red> in <blue>different</blue> ways. 

、これを表示することですプログラムは<color>/</color>ペアの出現を見て、コンソールを変更する必要があります囲まれたテキストを表示する前にカラーを調整します。表示するテキスト自体に<red>が含まれている場合は、<<がリテラル<を表すと判断するなど、何らかのエスケープメカニズムが必要です。

わかりますように、ファイル形式を定義することは容易ではありません。既存のパーサーがある確立された形式に固執する必要があります。

0

「テキスト」という単語は、広義に使用されていることがよくあります。 Cプログラミングの練習では、この用語の厳密な意味は、「リッチテキスト」形式やその他のテキスト形式とは対照的に、「プレーンテキスト」形式と呼ばれることもあります。のは、この簡単なデモプログラムを見てみましょう:

#include <stdio.h> 
#include <stdlib.h> 

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; 
} 

端子とシェル限り、fprintfstoutまたはstderrに書き込みますが、それは代わりに、通常のファイルへの書き込みを行う場合のようにのための色としてANSI/VT 100エスケープシーケンスを解釈しますこれは、ファイルに書き込まれますものです:

[31m===================TITLE=================
[0mThis is a plain text coloration test in C

関連する問題