#2

[C言語]プログラム実行時に入出力ファイルを指定する方法

こんにちは。Takuya.B(@TB_IQ)です。

研究でC言語を多用している私ですが、入出力ファイルを実行時に指定できたら楽なのになーと思って、ちょこっとイジったらできたので方法をご紹介します!

スポンサーリンク

ことのはじまり

以下のコードは実際にファイルをプログラムに読み込ませる為のソースコードです。

// ファイルを入力する方法(1)
#include <stdio.h>

int main(void)
{
   File *fp;
   int i,j;

   if((fopen=fp(stderr,"hoge.txt","r"){
     printf("ファイルが見つかりません\n");
     exit(-1);
   }

   //プログラムの内容ここ

  fclose(fp);
   return 0;
}

研究ではハッブル宇宙望遠鏡すばる宇宙望遠鏡などの大型望遠鏡によって観測されたデータを自分で作ったプログラムに読み込ませて解析作業をしています。

必要な用途に応じてプログラムは自作しているのですが、元データをawkなどで条件範囲ごとに切り分け、その切り分けた数分のファイルを順番に読み込ませて解析しなければなりません。

毎回、ファイル名を入力するためにエディタを開くのが面倒くさいというのが正直なところです(面倒くさがり)。

そこで、「プログラム実行する時に入出力ファイルを指定することが出来たらええよな?」ってことで、まず自分で思いついた方法でやってみようと思ったら、あっさりと出来てしまいましたのでご紹介致します!!

プログラム実行時に入出力ファイルを指定する方法

//ファイル入力箇所

  FILE *fp;

  if((fp=fopen("hoge.tbl","r"))==NULL){
    printf(stderr,"ファイルが見つかりません\n"); //エラー処理
    exit(-1);                   //エラー処理
  }

上のソースコードのようにファイルの入力をしています。hoge.tblというファイルしか読み込まないのであれば、これで構いません。しかし、hoge.tblだけでなく、hage.tblhige.tbl…など複数のファイルをこのプログラムに読み込ませるつもりなのであれば、毎度エディタを開いて編集するのは面倒です。そこで以下のように編集しました。

//プログラム実行時にファイル指定する方法
 
  FILE *fp;
  char input[256];

  printf("入力するデータ名を入力して下さい>>>");
   scanf("%s",&input);
   if((fp=fopen(("%s",input),"r"))==NULL){
      fprintf(stderr,"ファイルが読み込めません\n");   //エラー処理
      exit(-1);                    //エラー処理
    }

char型変数inputを宣言して、配列を利用し255文字までファイル名を入力できるようにしています(こんなにいらん)。ファイルオープンする前に入力ファイルを入力し、それをif文の中のファイル名の箇所にぶっこんでやりました。出力ファイルの場合も同様にファイル名を指定することができます。

スポンサーリンク

まとめ

プログラム実行時にファイル名を任意に指定できるということが分かって、研究がさらに捗るようになりました!!

自分が「こうしたい!」っていう機能を実装することができた時ってものすごくテンションが上がってしまいます!

この方法が正しいのかグーグル先生に聞いてみてもあまり良い返答を得られませんでしたので、私と同じ悩みをお持ちの方の助けとなれれば幸いです。