c言語テキスト操作の基本原理

3050 ワード

ここでは主にデータをバイナリ形式で読み取ることとテキスト形式で読み取ることの主な違いについて述べる.
テキスト形式で読み取る場合、実際にはデータを文字に変換してテキストファイルに格納します
次のテストを行います.
 
#include
#include
int main()
{
    FILE *fp;
    int a,b;
    if((fp=fopen("d:\\abc\\ceshi.txt","w"))==NULL)
       {
           printf("error!
"); exit(0); } a=123; fprintf(fp,"%d%d",a,a); fclose(fp); }

ファイルを開くと、ファイル内のデータが123123と表示されます.
 
次に、このデータを読み取り、プログラムで表示します.
 
#include
#include
int main()
{
    FILE *fp;
    int a,b;
    if((fp=fopen("d:\\abc\\ceshi.txt","r"))==NULL)
       {
           printf("error!
"); exit(0); } a=123; fscanf(fp,"%d",&b); fclose(fp); printf("b=%d
",b); }

実行結果b=1123123が表示されます
 
ではもう一つテストをします
 
#include
#include
int main()
{
    FILE *fp;
    int a,b,a1,a2;
    if((fp=fopen("d:\\abc\\ceshi.txt","r"))==NULL)
       {
           printf("error!
"); exit(0); } a=123; fscanf(fp,"%3d%3d",&a1,&a2); fclose(fp); printf("a1=%d,a2=%d",a1,a2); }

実行結果:a 1=123,a 2=123
 
テキスト方式でデータを読み取る場合、テキスト文字を一定のフォーマットで必要なデータに変換して対応する変数に割り当てるかどうか.
では、もう一度テストします.
 
#include
#include
int main()
{
    FILE *fp;
    int a,b,a1,a2;
    if((fp=fopen("d:\\abc\\ceshi.txt","r"))==NULL)
       {
           printf("error!
"); exit(0); } a=123; fscanf(fp,"%4d%2d",&a1,&a2); fclose(fp); printf("a1=%d,a2=%d",a1,a2); }

まず結果を当ててみましょう
 
O(∩∩)O、間違いなくa 1=1231、a 2=23である.
実際に文字列s 1="12341234"にテキストを入力しintタイプで読み出すと12341234となる.
今回のテストでは,テキストで読み取る場合,実際にはテキスト中の文字を対応するフォーマットに変換して対応する変数に割り当てることを説明する.すなわち、fprintfでは実際にはデータを文字に変換してテキストに格納し、fscanf()は実際には文字を対応するデータに変換して対応する変数に付与する.(テキスト操作方式)
 
バイナリ方式でデータを読み取るのはビットで読み取ることである.
 
#include
#include
int main()
{
    FILE *fp;
    int a=123,b,a1,a2;
    if((fp=fopen("d:\\abc\\ceshi.txt","wb"))==NULL)
       {
           printf("error!
"); exit(0); } fwrite(&a,sizeof(a),1,fp); fwrite(&a,sizeof(a),1,fp); fclose(fp); }

 
 
 
 
 
バイナリ方式でデータを読み出す場合に用いられる読み出し方式は、一般にfread()であり、fwrited()であり、ブロックによる読み出しでもある(大量のデータを格納し、例えば図書管理システムでは一般的にこのような方式で格納される).
バイナリ方式で読み出しを行う場合、fread()fwrited()がブロックに厳格に従ってデータを読み出しているため(つまり、読み出したバイト数を彼に伝え、fpが指すところからそのバイト数がaに与えられるアドレスを読み出す)、
バイナリで保存したデータは表示できません(文字化けします)
 
 
次に、バイナリ方式の読み取りはfread(),fwrited()のみであり、fread(),fwrited()もバイナリ方式の読み取りにのみ用いられる
 
以上、間違いがあれば、下のコメントエリアで指摘していただき、感謝に堪えません.