fscanf_s() でファイルから入力

fscanf_s() を使って TEXT 形式のファイルから入力します。

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

プロジェクトの設定

  1. ソースプログラムです。
    ファイル名 説明
    fscanf.cpp TEXT 編集ファイル入力
  2. オープンモードの説明です。
    mode 意味
    "r" リード(入力)モード、ファイルは存在していること
    "w" ライト(出力)モード、ファイルが無ければ新設され、あれば空にされる
    "a" アペンド(追加)モード、ファイルが無ければ新設され、あればファイルエンドに位置づける
    "r+"ファイル更新用にr/wでオープン、ファイルは存在していること
    "w+"ファイル更新用にr/wでオープン、ファイルが無ければ新設され、あれば空にされる
    "a+"ファイル更新用にr/wでオープン、ファイルが無ければ新設され、あればアペンドされる
    mode 意味
    "t" テキストモード
    "b" バイナリモード
    "t", "b" を省略すると、グローバル変数 _fmode で決まるモード(通常は "t")に設定されます。
        FILE    *FI;            //FILE の定義
    
        if (fopen_s(&FI,"data.txt","r")!=0)
        {
            オープンエラーの処理;
        }
        
  3. fscanf_s() はセキュリティが強化された fscanf() 関数です。
    fscanf_s() 関数はパラメータの先頭にファイル・ポインタが追加されただけで、scanf_s() 関数と同じように書きます。
    fscanf_s(scanf_s) では %s で受け取る領域のサイズを指定します。
    s1 のサイズが 6 で、s2 のサイズが 8 です。
    入力したデータを確認するために printf() で表示しています。
    入力が終われば fclose() で、ファイルを閉じて下さい。
        fscanf_s(FI,"%d %d %s %d %s",&d1,&d2,s1,6,&d3,s2,8);
        printf("%6d%6d %s %d %s\n", d1,d2,s1,d3,s2);
        fclose(FI);
        
  4. このプログラムで入力している TEXT ファイル(data.txt)の内容です。
    123  456  ABC  9876  XYZxyz
    
  5. fscanf_s() は便利な関数ですが、入力する TEXT ファイルの書き方に強い制約があります。
    次にデータがカンマで区切られた data2.txt を入力してみましょう。
    ABC のあとに空白が置かれていることに注目して下さい。
    文字列の後に空白を置かないと正しく入力出来ません。
    それ以外にも制約が厳しく、ベテランのプログラマはバイナリモードで入力してプログラムで切り分けています。
    または、テキストモードで1行ずつ入力してプログラムで切り分けます。
    行単位で入力する方法は TEXT FILE を表示する を参照して下さい。
    123,  456 ,  ABC , 9876,  XYZxyz ,
    
  6. data2.txt を入力する fscanf_s() 関数です。
        fscanf_s(FI,"%d , %d , %s , %d , %s ,",&d1,&d2,s1,6,&d3,s2,8);
        

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