C言語関係掲示板

過去ログ

No.407.1行目の数値と同じ行数をファイルに書き込む

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

ファイルの分割について
投稿者---moomin(2002/10/01 09:49:39)


はじめまして。
12行のテキストファイルがあり、
1行目は1〜3の数字です。
その1行目の数値と同じ行数を
(例えば2なら2〜3行目を取り出す。)
取り出してファイル1に、
残りの5〜12行目をファイル2に保存したいのですが、
方法がわかりません。
もし方法をご存知の方がいましたらよろしくお願いいたします。

No.2824

Re:ファイルの分割について
投稿者---みずや(2002/10/01 14:57:16)


>はじめまして。
>12行のテキストファイルがあり、
>1行目は1〜3の数字です。
>その1行目の数値と同じ行数を
>(例えば2なら2〜3行目を取り出す。)
>取り出してファイル1に、
>残りの5〜12行目をファイル2に保存したいのですが、
>方法がわかりません。
>もし方法をご存知の方がいましたらよろしくお願いいたします。

1行目の数字を取り出して整数型の変数に入れるところまでは
できているんでしょうか?

それができていれば、あとはfor文なりwhile文なりを使って、
その整数回分だけテキストファイルからfgets関数で1行ごとに
読み込み、その都度ファイル1に書き出せばいけます。
それが終われば、fgetsがNULLを返すまで(ファイルの終わりに
到達するまで)テキストファイルから1行ずつ読み込み、ファイ
ル2に書き出せば期待している結果が得られると思います。

No.2830

Re:ファイルの分割について
投稿者---kamadoma(2002/10/01 22:53:40)


>はじめまして。
>12行のテキストファイルがあり、
>1行目は1〜3の数字です。
>その1行目の数値と同じ行数を
>(例えば2なら2〜3行目を取り出す。)
>取り出してファイル1に、
>残りの5〜12行目をファイル2に保存したいのですが、
>方法がわかりません。
>もし方法をご存知の方がいましたらよろしくお願いいたします。



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

#define IN_FILE     "d:\\in.txt"
#define OUT_FILE01  "d:\\out01.txt"
#define OUT_FILE02  "d:\\out02.txt"

FILE *fileOpen(char *p_filename,char *p_mode);

int main(void)
{
        FILE *in_fp;
        FILE *out01_fp;
        FILE *out02_fp;
        char line[256];
        int lineNum;
        int nokoriNum;
        int i;

        /*ファイルオープン処理*/
        in_fp    = fileOpen(IN_FILE,"r");
        out01_fp = fileOpen(OUT_FILE01,"w");
        out02_fp = fileOpen(OUT_FILE02,"w");

    /*最初の一行を読み込み、行数を取得してしまう*/
        lineNum = atoi(fgets(line,256,in_fp));
        printf("lineNum = %d\n",lineNum);

        /*取得した行数分、ファイル出力*/
        for(i=0;i<lineNum;i++){
                fprintf(out01_fp,"%s",fgets(line,256,in_fp));

    }

        /*もう一方のファイルに出力する行数を求める*/
        nokoriNum = 11 - lineNum;
        /*行数分ファイル出力*/
        for(i=0;i<nokoriNum;i++){
        fprintf(out02_fp,"%s",fgets(line,256,in_fp));

        }

        /*ファイルクローズ処理*/
        fclose(in_fp);
        fclose(out01_fp);
        fclose(out02_fp);

        return 0;
}

FILE *fileOpen(char *p_filename,char *p_mode)
{
    FILE *fp;

        fp = fopen(p_filename,p_mode);
        if(fp == NULL){
        fprintf(stderr,"ファイル[%s]を開く事ができません。\n",p_filename);
                exit(1);
        }

        return fp;
}



No.2833

ありがとうございました!
投稿者---moomin(2002/10/02 13:34:18)


返答頂いてどうもありがとうございます、
とても助かりました!