• ベストアンサー

CSVファイル作成

 まだC,C++始めたばかりなので、よくわかりません。 以下のようなことを行いたい場合のプログラムをどなたか教えてください。 1)CSVファイルのファイル名は、日付(YYMMDD.CSV)。   ファイルが存在しない場合は、新規作成。   存在する場合は、データ追加。 2)データ要素は4項目(入力はキーボードから)。   この4項目+現在時刻(1項目)を1レコード   (1列)とする。

質問者が選んだベストアンサー

  • ベストアンサー
  • ondy
  • ベストアンサー率65% (15/23)
回答No.1

csvファイルはカンマ区切りでデータが並んでいます。 改行文字を書き込むと、1レコードが終わって次のレコードへ移ります。 fopen()でファイル名の後ろの拡張子をそのまま csv とすればよいです。 FILE *fp; int data[4], i; struct tm *ptr; time_t lt; if((fp = fopen("YYMMDD.csv", "a")) == NULL) { printf("file open error\n"); exit(1); } for(i=0; i<4; i++) { scanf("%d", &data[i]); fprintf(fp, "%d,", data[i]); } lt = time(NULL); ptr = localtime(&lt); fprintf(fp, "%s\n", asctime(ptr));

naka_naka
質問者

お礼

早速のご回答ありがとうございます。 CSVファイルのファイル名は、本日の日付(例えば070427.csv)に したいのですが、その場合はどうすればよろしいのでしょうか。

その他の回答 (4)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.5

日付を元にファイル名を組み立てるならこういう方法もあります。 #include <stdio.h> #include <time.h> int main() { time_t t; struct tm *date; char filename[256]; int len; t = time(NULL); date = localtime(&t); len = strftime(filename, sizeof filename, "%Y%m%d.csv", date); if (len != 0) printf("%s\n", filename); len = strftime(filename, sizeof filename, "%y%m%d.csv", date); if (len != 0) printf("%s\n", filename); return 0; } 実行結果: 20070427.csv 070427.csv BohYoh.com【C言語講座】標準ライブラリ関数 strftime http://www.bohyoh.com/CandCPP/C/Library/strftime.html

naka_naka
質問者

お礼

 ご回答ありがとうございました。 親切なご説明、感謝いたします。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★ファイル名の作成は。 ・『time』、『localtime』、『sprintf』を使います。  下にそのサンプルを載せます。 サンプル: char file[ 256 ]; time_t ltm; struct tm *ptm; ltm = time( NULL ); ptm = localtime( &ltm ); sprintf( file, "%02d%02d%02d.CSV",  ((ptm->tm_year + 1900) % 100),  (ptm->tm_mon + 1),  (ptm->tm_mday) ); 解説: ・現在の時刻は time 関数で取得します。  その後、localtime 関数で tm 構造体に年、月、日、時、分、秒の扱いやすい値に変換します。  次は、tm 構造体のメンバ tm_year、tm_mon、tm_mday を使ってファイル名を作成します。 ・sprintf 関数で printf 感覚でファイル名を作成します。文字列 file がそれ。  ファイル名の作成で『年』は西暦の2桁にするために 100 で割った余りを使います。  (年 % 100) とすると下2桁となります。 ・以上。参考に!

参考URL:
http://www9.plala.or.jp/sgwr-t/lib/time.html,http://www9.plala.or.jp/sgwr-t/lib/localtime.html
naka_naka
質問者

お礼

 ご回答ありがとうございました。 親切なご説明、感謝いたします。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

http://www9.plala.or.jp/sgwr-t/lib/localtime.html の使用例が参考になるのでは

naka_naka
質問者

お礼

 ご回答ありがとうございました。 親切なご説明、感謝いたします。 参考にさせていただきます。

  • DT200
  • ベストアンサー率38% (63/164)
回答No.2

> 早速のご回答ありがとうございます。 > CSVファイルのファイル名は、本日の日付(例えば070427.csv)に > したいのですが、その場合はどうすればよろしいのでしょうか。 : : char filename[ 16 ]; ← ファイル名を設定するためのバッファ time_t lt; struct tm *ptr; lt = time( NULL ); ptr = localtime( &lt ); ← なぜかアンパーサントが文字化けするので全角文字を使用。コーディングするときは半角で。 /* * ここまでは #1 さんの例と同じなのでそのまま使用。 * 次に日付でファイル名を生成する。年は下2桁なので100の剰余。 * 2桁にするために書式に"0"を忘れずに。 */ snprintf( filename, 15, "%02d%02d%02d.csv", ( ptr->tm_year + 1900 ) % 100, ptr->tm_mon + 1, ptr->tm_mday ); fp = fopen( filename, ....

naka_naka
質問者

お礼

 ご回答ありがとうございました。 親切なご説明、感謝いたします。