アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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(&lt);
fprintf(fp, "%s\n", asctime(ptr));
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/27 08:59

日付を元にファイル名を組み立てるならこういう方法もあります。



#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 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/27 15:06

★ファイル名の作成は。


・『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,htt …
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/27 15:06

http://www9.plala.or.jp/sgwr-t/lib/localtime.html
の使用例が参考になるのでは
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/27 15:05

> 早速のご回答ありがとうございます。


> 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, ....
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/27 15:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています