c言語でcsvファイルの処理で、処理速度が速いプログラムを書こうと思っ
c言語でcsvファイルの処理で、処理速度が速いプログラムを書こうと思っています。
以下のようなcsvファイル、件数は約10000000件以上あるものを使います
shop,ymd,gend,age,area,amt
20,2008-05-01,3,5,014,128
22,2008-05-01,2,4,015,350
:
二列目の日別、つまりymd別に最後列のamdの小計を出したいんですが、組んだプログラムを実行してみると、セグメンテーション違反ですと出てしまうんです。以下のようなプログラムを組んだんですが
#include <stdio.h>
#include <string.h>
#include <time.h>
#define MM 256
int main()
{
FILE *fp;
char str[MM],*p1, *p2,*ymd;
int num, sum;
clock_t start,end;
start = clock();
fp = fopen("csv.csv","r");
if(fp == NULL){
printf("ファイルが開けませんでした。\n");
return(0);
}
sum = 0;
fgets(str, sizeof(str), fp);
while(fgets(str, sizeof(str), fp) != NULL){
p1 = strtok(str, ",");
p1 = strtok( NULL,",");
ymd = p1;
p2 = strrchr(str,',');
sum[ymd] = atoi(p2+1);
break;
}
while( fgets(str, sizeof(str), fp) != NULL && p1 != NULL){
p1 = strtok(str, ",");
p1 = strtok( NULL,",");
p2 = strrchr(str,',');
if ( p2 != NULL ) {
if(ymd == p1){
sum[ymd] += atoi(p2+1);
}else{
printf("%s ,%d \n",ymd,sum[ymd]);
strcpy(ymd,p1);
}
}
}
printf("%s ,%d \n",p1,sum);
fclose(fp);
end=clock();
printf("%.2f秒\n",(double)(end-start)/CLOCKS_PER_SEC);
return(0);
}
うまくいきません。大体、処理速度は3秒以内を目指しています。
どなたかご教授御願いいたします。
お礼
まだまだプログラミング初心者なものでどうもありがとうございました