- 締切済み
読み込んだファイルをファイルに書き込む方法
読み込んだファイルをファイルに書き込む方法 プログラミング初心者です。 CかC++で(csv)ファイルを読み込み、その内容を(csv)ファイルに書き込むということをしたいのですが、 どのようなものを使えばよいのでしょうか? サイトやテキストを見てみたのですが、ほとんど ・ファイルを読み込む ・ファイルに書き込む のような単体での紹介しかなくて…。 なるべく簡単な方法でお願いしますm(_ _)m
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
UNIX系でしたら単にシェルのコマンドラインからリダイレクトを使って cat<○○.csv>××.csv のことですが。 実行はコマンドラインから ./a.out 読み込みファイル 書き込みファイル として実行してください。 /* Gcc on Mac OSX */ #include <stdio.h> #include <stdlib.h> //exit() #define SIZE 256 int main(int argc, char *argv[]) { char buff[SIZE]; char *_read,*_write; FILE *fpr,*fpw; if(argc != 3) return 1; _write=argv[2]; _read=argv[1]; printf("read file= %s, write file= %s?n", _read, _write); if((fpr=fopen(_read, "r"))==NULL || (fpw=fopen(_write,"w"))==NULL) exit(1); while(fgets(buff,SIZE,fpr)!=NULL) { fputs(buff,fpw); } fclose(fpr); fclose(fpw); return 0; }
- magicalpass
- ベストアンサー率58% (378/648)
>・ファイルを読み込む >・ファイルに書き込む >のような単体での紹介しかなくて…。 基本的にはその組み合わせなのですから、それをどうコーディネイトしていくかがソフトの開発というものです。CSVの中身などいじらず、読み込んだデータをそのまま書き出すだけなら、これで十分なはずです。 以下はCSVデータの中身をいじる場合。 標準のライブラリを用いてる範囲ではCSVの読み書きを直接やってくれるような機能はありませんから、自分で組み立てる必要があります。 CSVファイルということは何らかの規則的なデータ構造を持ったデータだと思われますか、一行にレコード一件、各行は複数のフィールドに分かれているものとします。データ処理を考えた場合、各行のレコードをそれぞれ構造体に読み込み、全体はこの構造体の行数分の配列として取り扱うのが簡単でしょう。 何億行もあるようなデータなら逐次読み出しで順番に処理していく必要があるでしょうけど、数百行とか数千行レベルのデータなら一括して読み込んで処理した方が簡単です。 (1)ファイルの読み込み(一括) (ファイル入出力機能を使う) (2)行数をカウント (入力データ中の改行を数える) (3)構造体配列のメモリを確保 (構造体サイズ×行数) (4)一行ずつCSVデータを構造体配列に格納 (コンマ区切りでデータを分割して読み込む) (5)構造体配列を用いて目的のデータ処理を行う。 (なんなりとご自由に) (6)出力データ用のメモリ領域を確保 (データ全体をテキスト化するのに十分な大きさ) (7)構造体配列をCSVデータに変換 (構造体データをコンマ区切りの文字列にする) (8)ファイルに出力(一括) (ファイル入出力機能を使う) もちろん(1)~(8)が関数レベルで一発で出来るというわけではありませんから、それぞれの機能を実現するための処理を記述することが必要です。
- anicicle
- ベストアンサー率36% (129/356)
>なるべく簡単な方法でお願いしますm(_ _)m すでに質問に書いてあるのが一番簡単な方法。 >サイトやテキストを見てみたのですが、ほとんど >・ファイルを読み込む >・ファイルに書き込む >のような単体での紹介しかなくて…。 質問は「ファイルを読み込み、書き出す」のだから、「読む」と「書く」処理を連続して行うだけ。 「単体しかない」のではなく、Cは機能の組み合わせだから単体で十分と判断しているから。
- salsberry
- ベストアンサー率69% (495/711)
基本的な手順は下記の通り。あとは読み込んだファイルに対してどんな処理をしたいのかによる。 【対象のファイルが小さくてメモリに余裕がある場合】 1 ファイルAを読み込み用にオープン 2 ファイルAの内容を全てメモリに読み込む 3 ファイルAをクローズ 4 必要に応じてメモリ上のデータを加工 5 ファイルBを書き込み用にオープン 6 メモリの内容をファイルBに書き込む 7 ファイルBをクローズ 【対象のファイルが大きい場合】 1 ファイルAを読み込み用にオープン 2 ファイルBを書き込み用にオープン 3 ファイルAの内容を少し (たとえば1行分) メモリに読み込む 4 必要に応じてメモリ上のデータを加工 5 メモリの内容をファイルBに書き込む 6 ファイルAの最後を読み出すまで3から5を繰り返す 7 ファイルAをクローズ 8 ファイルBをクローズ