- ベストアンサー
CSVファイル作成
まだC,C++始めたばかりなので、よくわかりません。 以下のようなことを行いたい場合のプログラムをどなたか教えてください。 1)CSVファイルのファイル名は、日付(YYMMDD.CSV)。 ファイルが存在しない場合は、新規作成。 存在する場合は、データ追加。 2)データ要素は4項目(入力はキーボードから)。 この4項目+現在時刻(1項目)を1レコード (1列)とする。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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(<); fprintf(fp, "%s\n", asctime(ptr));
その他の回答 (4)
- sakusaker7
- ベストアンサー率62% (800/1280)
日付を元にファイル名を組み立てるならこういう方法もあります。 #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
お礼
ご回答ありがとうございました。 親切なご説明、感謝いたします。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★ファイル名の作成は。 ・『time』、『localtime』、『sprintf』を使います。 下にそのサンプルを載せます。 サンプル: char file[ 256 ]; time_t ltm; struct tm *ptm; ltm = time( NULL ); ptm = localtime( <m ); 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
お礼
ご回答ありがとうございました。 親切なご説明、感謝いたします。
- php504
- ベストアンサー率42% (926/2160)
http://www9.plala.or.jp/sgwr-t/lib/localtime.html の使用例が参考になるのでは
お礼
ご回答ありがとうございました。 親切なご説明、感謝いたします。 参考にさせていただきます。
- DT200
- ベストアンサー率38% (63/164)
> 早速のご回答ありがとうございます。 > 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, ....
お礼
ご回答ありがとうございました。 親切なご説明、感謝いたします。
お礼
早速のご回答ありがとうございます。 CSVファイルのファイル名は、本日の日付(例えば070427.csv)に したいのですが、その場合はどうすればよろしいのでしょうか。