64,281
社区成员
发帖
与我相关
我的任务
分享
//有一个大文件 20多G 里面一行一行的(csv格式,逗号隔开的那种)都是订单信息 主要的有
//订单id,用户id,商户id,日期
//1,11111,111111111,2013-01-01
//2,11111,222222222,2013-01-02
//3,11111,222222222,2013-01-02
//4,22222,222222222,2013-01-02
//5,22222,222222222,2013-01-03
//6,11111,333333333,2013-01-03
//7,33333,333333333,2013-01-03
//8,33333,111111111,2013-01-03
//需要求出的就是过去每天“每个商户”的“当天新增支付用户总数”和“累计支付用户总数”
//还有就是内存不是很大 需要考虑内存原因
//id是需要去除重复的
//结果类似:
//各商户当天新增支付用户总数
//商户id,2013-01-01,2013-01-02,2013-01-03,...
//111111111,1,0,1,...
//222222222,0,2,0,...
//333333333,0,0,2,...
//...
//各商户累计支付用户总数
//商户id,2013-01-01,2013-01-02,2013-01-03,...
//111111111,1,1,2,...
//222222222,0,2,2,...
//333333333,0,0,2,...
//...
#include <stdio.h>
int notin(int sid,int uid) {//sid之前没有uid的订单
//TODO:快速判断sid之前没有uid的订单
}
void inc1uid(int sid,char *dt) {//将sid在dt这天的新增支付用户总数和累计支付用户总数都累加1
//TODO:将sid在dt这天的新增支付用户总数和累计支付用户总数都累加1
}
int main(int argc,char **argv) {
FILE *fi;
char ln[4096];
int did,uid,sid;
char dt[11];
if (argc<2) {printf("Usage:%s inputfile\n",argv[0]);return 1;}
fi=fopen(argv[1],"r");
if (NULL==fi) {printf("Can not open file %s!\n",argv[1]);return 2;}
fgets(ln,4096,fi);
while (1) {
if (NULL==fgets(ln,4096,fi)) break;
if (4==sscanf(ln,"%d,%d,%d,%s",&did,&uid,&sid,dt)) {
if (notin(sid,uid)) inc1uid(sid,dt);
}
}
fclose(fi);
//TODO:输出所有dt对应的各商户当天新增支付用户总数
//TODO:输出所有dt对应的各商户累计支付用户总数
return 0;
}
就等楼主付款后我在DO了。
Just DO it!