レコードの入出力

レコード(構造体)を binary 形式でファイルに出力します。
また binary 形式で出力されたレコードを入力して表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

レコードの出力

  1. ソースプログラムです。
    ファイル名 説明
    RecordPut.cpp レコード出力
    RecordGet.cpp レコード入力
  2. 構造体で定義したレコードを編集しないで、そのままのイメージでファイルに出力します。
    構造体とレコードの説明は 構造体の基本 を参照して下さい。
  3. 構造体の定義と10件分のレコードです。
    これをそのままファイルに出力します。
    typedef struct
    {   char    m_name[24];
        int     m_ten1;
        int     m_ten2;
    }   TSeiseki;
    
    TSeiseki    seiseki[10] =
    { { "愛知 真唯子", 100, 100 },
      { "青森 孝雄",     0,   0 },
      { "秋田 景子",    10,  10 },
      { "石川 雅夫",    20,  20 },
      { "茨城 優子",    30,  30 },
      { "岩手 あゆみ",  40,  40 },
      { "愛媛 和子",    50,  50 },
      { "大分 慎吾",    60,  60 },
      { "大阪 恵",      70,  70 },
      { "岡山 英子",    80,  80 }
    };
    
  4. オープン命令です。
        FILE    *FD;            //FILE の定義
    
        if (fopen_s(&FD,"w.bin","wb")!=0)
        {
            オープンエラーの処理;
        }
        
  5. ファイルに出力するソースコードです。
    sizeof(TSeiseki) がレコードのサイズで、10がレコードの件数です。
    fwrite(seiseki,sizeof(TSeiseki),10,FD);
  6. このプログラムで出力された w.bin を Text Editor で確認してみて下さい。
    int 型のデータがそのまま書かれているので Editor では正常に表示出来ないでしょう。
    binary 転送はデータを編集する必要が無いので、高速で入出力することが出来ます。
    レコード処理は、大容量/大量のデータを扱う事務処理に適しています。

レコードの入力

  1. オープン命令です。
        FILE    *FD;            //FILE の定義
    
        if (fopen_s(&FD,"w.bin","rb")!=0)
        {
            オープンエラーの処理;
        }
        
  2. 先頭のレコードを入力して表示します。
    sizeof(TSeiseki) がレコードのサイズです。
        fread(&seiseki,sizeof(TSeiseki),1,FD);
        printf("\n%-24s %3d %3d", seiseki.m_name,seiseki.m_ten1,seiseki.m_ten2);
        
  3. 4番目のレコード(石川 雅夫)を直接入力して表示します。
    fseek() で現在位置を4番目のレコードに設定します。
        fseek(FD,sizeof(TSeiseki)*3,0);
        fread(&seiseki,sizeof(TSeiseki),1,FD);
        printf("\n%-24s %3d %3d", seiseki.m_name,seiseki.m_ten1,seiseki.m_ten2);
        
  4. 終端から2番目のレコード(大阪 恵)を直接入力して表示します。
    fseek() で現在位置を終端から2番目のレコードに設定します。
        fseek(FD,sizeof(TSeiseki)*-2,2);
        fread(&seiseki,sizeof(TSeiseki),1,FD);
        printf("\n%-24s %3d %3d", seiseki.m_name,seiseki.m_ten1,seiseki.m_ten2);
        
  5. fseek() の基点はシンボルで設定する方がわかり易いでしょう。
    シンボル説明
    SEEK_SET 0ファイル先頭から
    SEEK_CUR 1ファイルポインタの現在位置から
    SEEK_END 2ファイル終端から
  6. Windows 標準の HANDLE を使った入出力は HANDLE を使った string 入出力 を参照して下さい。
    Windows Program のファイル入力は ファイルを入力する Object Class を作成する を参照して下さい。
    C# の Binary データの出力は binary DATA の出力 を、 入力は binary DATA の入力 を参照して下さい。
    リンクがエラーになるときは「前田稔の超初心者のプログラム入門」から辿って下さい。

超初心者のプログラム入門(C/C++)