Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

ファイル操作を使って整数データを処理するCプログラム(奇数・偶数の振り分け方法)

このプログラムでは、1つのファイルに格納された整数データの中から奇数と偶数を振り分けます。具体的には、奇数をすべて「ODD」ファイルへ、偶数をすべて「EVEN」ファイルへ書き込んでいきます。

プログラムの流れ

まず、DATAファイルを書き込みモードで開き、数値を書き込んだ後、ファイルを閉じます。

続いて、以下の3つのファイルを開きます。

  • DATAファイルを読み込みモードで開く
  • ODDファイルを書き込みモードで開く
  • EVENファイルを書き込みモードで開く

その後、whileループを使ってDATAファイルから数値を1つずつ読み込み、偶数か奇数かを判定しながら、それぞれ対応するファイルへ書き込みます。

最後に、開いたすべてのファイルを閉じて処理を終了します。

サンプルコード

以下は、ファイルの概念を使用して整数データファイルを処理するCプログラムの例です。

#include <stdio.h>
int main(){
   FILE *f1,*f2,*f3;
   int number,i;
   printf("DATA file content is\n");
   f1=fopen("DATA","w");//DATAファイルを作成
   for(i=1;i<=10;i++){
      scanf("%d",&number);
      if(number==-1)
         break;
      putw(number,f1);
   }
   fclose(f1);
   f1=fopen("DATA","r");
   f2=fopen("ODD","w");
   f3=fopen("EVEN","w");
   while((number=getw(f1))!=EOF){//DATAファイルから読み込み
      if(number %2 ==0)
         putw(number,f3); //EVENファイルへ書き込み
      else
         putw(number,f2); //ODDファイルへ書き込み
   }
   fclose(f1);
   fclose(f2);
   fclose(f3);
   f2=fopen("ODD","r");
   f3=fopen("EVEN","r");
   printf("\n contents of ODD file:\n");
   while((number=getw(f2))!=EOF)
      printf("%3d",number);
   printf("\n contents of EVEN file:\n");
   while((number=getw(f3))!=EOF)
      printf("%3d",number);
   fclose(f2);
   fclose(f3);
   return 0;
}

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

DATA file content is
1
2
3
4
5
6
7
8
9
10
contents of ODD file:
1 3 5 7 9
contents of EVEN file:
2 4 6 8 10

ポイント解説

このプログラムで使われている主な関数は以下のとおりです。

  • fopen():ファイルを開きます。モードには書き込み用の「w」、読み込み用の「r」を指定します。
  • putw():整数をファイルへ1つずつ書き込みます。
  • getw():ファイルから整数を1つずつ読み込みます。ファイルの終端に達するとEOFを返します。
  • fclose():開いたファイルを閉じ、リソースを解放します。

なお、putw()getw()は標準C規格には含まれない非標準関数であるため、コンパイラによっては使用できない場合があります。その際は、fwrite()fread()、あるいはfprintf()fscanf()に置き換えることで、同じ処理を実現できます。

このように、ファイル入出力の基本操作を組み合わせることで、データの振り分けや分類処理を簡単に実装できます。

  1. Pythonのbase64モジュールを使ったデータエンコード・デコード入門

    PythonにおけるBase64エンコーディングとはPython標準ライブラリのbase64モジュールは、バイナリデータをプレーンテキスト(ASCII)プロトコルで安全に送信できる形式へ変換するための機能を提供します。メール送信、URLへの埋め込み、HTTP POSTリクエストなど、テキストベースの通信経路でバイナリデータを扱いたい場面で活躍するモジュールです。このモジュールが実装しているのは、RFC 3548で定義されたBase16、Base32、Base64の各アルゴリズム、および事実上の標準となっているAscii85とBase85のエンコーディングです。RFC 3548準拠のエンコーディ

  2. LinuxでTARコマンドを使ってファイルをアーカイブする方法

    アーカイブとは、多数のフォルダやファイルを1つのファイルの中にまとめて格納できる特殊なファイルのことです。アーカイブが便利な最大の理由は、中に含まれるファイルやフォルダが、アーカイブ外にあったときと同じファイル構造を保持しており、展開した際にもその構造がそのまま維持される点にあります。アーカイブにはさまざまな形式がありますが、そのひとつがTAR(Tape Archive)形式です。LinuxやUnix系システムで広く使われているTARファイル(通称「tarball」とも呼ばれます)は、Consolidated Unix Archive形式のファイルです。 TARファイル形式は、大量のデータを「