C言語関係掲示板

過去ログ

No.448.1つのプログラムの中で変換した別のファイルをさらに読み込む

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

ファイルの読み込み
投稿者---poo(2002/10/29 15:05:01)


2度目の投稿です。
ファイルの読み込みという漠然なタイトルですみません。

CSVファイルを読み込んで別のファイルに数字だけ表示するようにしました。
1,2,3→1 2 3
のようにカンマからスペースに直したものを別のファイルに書き込みました。
1つのプログラムの中で変換した別のファイルをさらに読み込むことは可能でしょうか?
また、できる場合はどうしたらいいのか教えてください。
お願いしますm(__)m



No.3268

Re:ファイルの読み込み
投稿者---かずま(2002/11/01 02:38:47)


> ファイルの読み込みという漠然なタイトルですみません。

「教えてください」とかじゃなくて、他と区別がつくから、かまいませんよ。


> CSVファイルを読み込んで別のファイルに数字だけ表示するようにしました。
> 1,2,3→1 2 3
> のようにカンマからスペースに直したものを別のファイルに書き込みました。

ファイルに表示する、というのが、ちょっと変な表現ですが、とにかく、出来た
ところまでのプログラムをここに書いてもらうと、もっと早くコメントがついた
と思うのですが。


> 1つのプログラムの中で変換した別のファイルをさらに読み込むことは可能でしょうか?

もちろん、できますよ。ファイル操作の基本のような気がしますが、こんなもんで
よいのでしょうか。それとも、もっと違うことがしたいのでしょうか。
#include <stdio.h>

#define CVS_FILE      "file1.txt"
#define ANOTHER_FILE  "file2.txt"

int main()
{
    FILE *fp1, *fp2;  int c;

    fp1 = fopen(CVS_FILE, "r");
    if (fp1 == NULL) return 1;
    fp2 = fopen(ANOTHER_FILE, "w");
    if (fp2 == NULL) return 1;
    while ((c = getc(fp1)) != EOF)
        putc(c == ',' ? ' ' : c, fp2);
    fclose(fp1);
    fclose(fp2);

    fp1 = fopen(ANOTHER_FILE, "r");
    if (fp1 == NULL) return 1;
    while ((c = getc(fp1)) != EOF)
        putchar(c);
    fclose(fp1);

    return 0;
}


No.3280

Re:ファイルの読み込み
投稿者---poo(2002/11/01 18:19:01)


ありがとうございます!
さらに質問なんですが、新しくファイルに書き換えてそれを読み込んだあとにそのファイルを消してもとのファイルだけを残すっていう方法ありますか?
探しているのですが、まったくいい方法が見つからないんです。

何か参考になることがありましたらぜひ教えてください。
お願いします。

No.3281

Re:ファイルの読み込み
投稿者---かずま(2002/11/01 19:40:04)


> 新しくファイルに書き換えてそれを読み込んだあとにそのファイルを消して
> もとのファイルだけを残すっていう方法ありますか?

 remove(ANOTHER_FILE);

CVS_FILE は残っています。

No.3282

Re:ファイルの読み込み
投稿者---aki(2002/11/01 20:23:28)


作業用の一時ファイルを作るのにtmpfile関数を使うとよいでしょう。
tmpfile関数が作成した一時ファイルは、そのファイルをcloseした時
か、またはプログラム終了時に自動的に削除されます。

#include <stdio.h>
#include <stdlib.h>

void error(const char *emsg) { fprintf(stderr, "%s", emsg), exit(1); }

void convert(FILE *dest, FILE *src)
{
    int c;

    while ((c = fgetc(src)) != EOF)
        fputc(c == ',' ? ' ' : c, dest);
}

void copy(FILE *dest, FILE *src)
{
    int c;

    while ((c = fgetc(src)) != EOF)
        fputc(c, dest);
}

int main(int argc, char *argv[])
{
    FILE *in, *tmp;

    if (argc != 2)
        error("入力ファイルを指定してください");

    if ((in = fopen(argv[1], "rb")) == NULL)
        error("入力ファイルをオープンできませんでした");

    if ((tmp = tmpfile()) == NULL)
        error("一時ファイルを作成できませんでした");

    convert(tmp, in);
    rewind(tmp);
    copy(stdout, tmp);
    return 0;
}


No.3288

Re:ファイルの読み込み
投稿者---poo(2002/11/02 13:32:24)


かずま様、aki様ありがとうございました!
参考にして作ってみたいと思います!!