C言語関係掲示板

過去ログ

No.435.ファイル名に配列を使いたい!

[戻る] [ホームページ]
No.3078

ファイル名に配列を使いたい!
投稿者---午前の紅茶(2002/10/23 19:00:57)


うす、新参者です。
自分は今あるプログラムを書いてます。データが400個出るようにしているんですが、出力先がファイル1つにしかできません。これを1個のデータにつき1つのファイルに出力したい場合はどうすればできますか?配列ちっくなものを使えばできるのはわかるんですが・・・
ご教授おねがいします。

No.3081

Re:ファイル名に配列を使いたい!
投稿者---ともじ(2002/10/23 20:13:08)


こんばんは。

>自分は今あるプログラムを書いてます。データが400個出るようにしているんですが、出力先がファイル1つにしかできません。これを1個のデータにつき1つのファイルに出力したい場合はどうすればできますか?配列ちっくなものを使えばできるのはわかるんですが・・・

はい、ファイル名を配列に格納してfopenしてください。
#include <stdio.h>
#define N 3

int main(void)
{
	char *fname[N] = {"abc.dat", "efg.dat", "hij.dat"};
	FILE *fp[N];
	int i, j;
	
	for (i = 0; i < N; i++) {
		if ((fp[i] = fopen(fname[i], "w")) == NULL) {
			printf("file open error!!\n");
			for (j = 0; j < i; j++)
				fclose(fp[j]);
			return (1);
		}
	}
	
	for (i = 0; i < N; i++)
		fclose(fp[i]);
		
	return (0);
}


No.3084

Re:ファイル名に配列を使いたい!
投稿者---午前の紅茶(2002/10/23 20:51:35)



早いレスありがとうございます。
ちなみに、400個のデータが出てくるので、ファイル名をdata[1],data[2],・・・data[400]と言う風に使いたいのですが、char data[400] を入れてコンパイラしなおすと(他はすべて、3を400に書き換えました。)

warning:initialization makes pointer fron integer without a cast

と出てきて、コンパイラできませんでした。これはどういう意味ですか?お手数かけてスミマセン。お願いします。

No.3087

Re:ファイル名に配列を使いたい!
投稿者---ともじ(2002/10/23 21:59:07)


>warning:initialization makes pointer fron integer without a cast
>
>と出てきて、コンパイラできませんでした。これはどういう意味ですか?お手数かけてスミマセン。お願いします。

変数の型が合っていないようですが。
宣言部分と警告の出ている部分だけでいいのでソースを添付してください。

No.3088

Re:ファイル名に配列を使いたい!
投稿者---かずま(2002/10/23 22:29:00)


> はい、ファイル名を配列に格納してfopenしてください。

VC++ や gcc では、ファイルを同時に 400個オープンできますが、
BC++ だと 47個、LSI-C だと 17個しかオープンできません。
(標準入力、標準出力、標準エラー出力の 3 個はすでにオープンされている)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N  400

int main()
{
    int i, data[N];  FILE *fp;  char fname[16];

    srand(time(0));
    for (i = 0; i < N; i++)  /* データを N 個 用意する */
        data[i] = rand();
    
    for (i = 0; i < N; i++) {
        sprintf(fname, "file%03d.dat", i+1);
        fp = fopen(fname, "w");
        if (fp == NULL) return printf("can't create %s\n", fname), 1;

        fprintf(fp, "%d\n", data[i]);

        fclose(fp);  /* fclose しないと、そのうち fopen 出来なくなる */
    }
    return 0;
}


No.3092

Re:ファイル名に配列を使いたい!
投稿者---ともじ(2002/10/23 23:58:59)


>VC++ や gcc では、ファイルを同時に 400個オープンできますが、
>BC++ だと 47個、LSI-C だと 17個しかオープンできません。
>(標準入力、標準出力、標準エラー出力の 3 個はすでにオープンされている)

いつもながらご指摘ありがとうございます。
そうですよね。一度に400オープンできる処理系は少ないですよね。
最初に提示したプログラムでは400一度に開いてしまいます。
午前の紅茶さん、一つずつオープンしては書き込み、クローズ
するようにしてください。
ちなみに、<stdio.h>のFOPEN_MAXを見るとオープン数の上限が
わかります。


No.3093

Re:ファイル名に配列を使いたい!
投稿者---午前の紅茶(2002/10/24 00:12:47)


本当にありがとうございました。皆さんの指摘どおりにやってみます。
これで、卒論が一歩進みそうです。また質問があるときはご指導、ご鞭撻をよろしくお願いします。