レシートCSVメーカ
ある作業を円滑に進めるため,年月日,商品名,価格とメモを,CSVに追記してくプログラムを作った.
効果は,Excelで開いてsum()を入れるときに気がついた.それは,目が疲れにくかったかも,というもの.初めは,TabキーだのEnterだので迷わなくて済む,と考えていた.
デメリットは,IMEオンが Alt+漢字 になること.コマンドプロンプト上だから.
gets()を使っていた部分などを書き直したのが次のコードである.なぜだか,ctype.hまでインクルードしてた.
#include<stdio.h> #include<stdlib.h> #include<string.h> #define TAILWORD "qwerty" #define CSVFILENAME "qwerty.csv" #define DATESTRINGSIZE 8 int main(void){ typedef struct{ int money; char name[BUFSIZ]; char memo[BUFSIZ]; char date[DATESTRINGSIZE]; } item_t; item_t item; FILE *fp; fp = fopen(CSVFILENAME, "at"); if(!fp){ puts("ファイルオープンに失敗.終了する"); exit(1); } while(1){ puts("データある?"); printf("項目: "); fgets(item.name, BUFSIZ-1, stdin); item.name[strlen(item.name)-1] = '\0'; printf("金額: "); fgets(item.memo, BUFSIZ-1, stdin); item.memo[strlen(item.memo)-1] = '\0'; item.money = atoi(item.memo); printf("年月日(YYYYMMDD): "); fgets(item.date, DATESTRINGSIZE-1, stdin); item.date[strlen(item.date)-1] = '\0'; printf("メモ: "); fgets(item.memo, BUFSIZ-1, stdin); item.memo[strlen(item.memo)-1] = '\0'; if(!strncmp(item.name, TAILWORD, sizeof(TAILWORD))){ puts("終了処理へ・・・"); break; }else if( item.name[0]=='\0' || item.name[0]=='\n' || strlen(item.date)!=DATESTRINGSIZE){ puts("何かがおかしかったので無かったことにします"); printf("終了するときは,項目名を %s としてください\n", TAILWORD); }else{ fprintf(fp, "%c%c%c%c,%c%c,%c%c,%s,%d,%s\n", item.date[0], item.date[1], item.date[2], item.date[3], item.date[4], item.date[5], item.date[6], item.date[7], item.name, item.money, item.memo); } } fclose(fp); return 0; }
code2htmltextの不具合を修正するのに手間取った.