Code:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include <vector>
#include "unisam.hpp"
#include <iostream>
#include<fstream>
#define MAX_LENGTH_of_personID 50
#define MAX_No_of_personID 100
using namespace std;
int main(int argc, char *argv[])
{
struct IDnTime
{
char ID[MAX_LENGTH_of_personID];
vector<char *> s;
vector<char *> g;
int dist;
char previousEdate[50];
char previousEtime[50];
struct tm theTime;
struct tm *ptr;
time_t t;
} IDnTimeArray[MAX_No_of_personID];
char Walk ='w',Bike ='b',Car ='c',UrbanPuT ='u',Rail ='r',Notdecided ='n',Activity ='a';
char *walk =&Walk, *bike =&Bike, *car =&Car, *urbanPuT =&UrbanPuT, *rail =&Rail, *notdecided =&Notdecided, *activity =&Activity;
struct tm theTime1, theTime2, theTime3, theTime4, theTime5;
struct tm *ptr1=&theTime1;
struct tm *ptr2=&theTime2;
struct tm *ptr3=&theTime3;
struct tm *ptr4=&theTime4;
struct tm *ptr5=&theTime5;
double t1, t2, t3,t4, t5,t6;
time_t timediff1, timediff2 , timediff3, timediff4;
int remainder3, remainder4,pushBackCounter3, pushBackCounter4,remainder2, remainder1,pushBackCounter2, pushBackCounter1, z;
FILE *f, *f1, *f3,*f4;
char c,d, e;
int y1=0,y=0,gg=0,hh=0,ii=0,jj=0,kk=0,ggg=0,hhh=0,iii=0,jjj=0,kkk=0,ntab=0,intab=0, ntab1=0, counter=0,flag1,flag_1,counter_1=0, flag2, flag3, match, match1, newlineCounter=0,newlineCounter1=0, counter1=0;
char sDate[50], sTime[50], eDate[50], eTime[50], mode[50], personID[50], personID1[50], ipreviousEdate[50], ipreviousEtime[50];
char isDate[50], isTime[50], ieDate[50], ieTime[50], imode[50], ipersonID[50];
char IDStartTime[MAX_No_of_personID];
char interview_data_file_header[50]="FlammOriginalStages_", interview_data_file[50];
f=fopen("StageStatistics.txt", "r");
f3=fopen("Unisam_allDist.txt", "a");
int totalDist=0;
while ((e=getc(f))!=EOF)
{
if (e=='\n')
{
ntab1=0;
y1=0;
if (strcmp(personID1,"PersonID")==0)
continue;
else
{
match1=0;
for (flag_1=counter_1;flag_1>=0;flag_1--)
{
if (strcmp(IDnTimeArray[flag_1].ID,personID1)==0)
match1 =1;
}
if (match1==0)
{
strcpy(IDnTimeArray[counter_1].ID,personID1);
IDnTimeArray[counter_1].s.clear();
IDnTimeArray[counter_1].g.clear();
IDnTimeArray[counter_1].dist=0;
IDnTimeArray[counter_1].ptr=&IDnTimeArray[counter_1].theTime;
++counter_1;//printf("\n%d\n",counter_1);
}
}
}
else if (e=='\t')
{
++ntab1;
personID1[y1]='\0';
}
else
{
if (ntab1==0)
{
personID1[y1]=e;
++y1;
}
}
}
fclose(f);
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
for (counter1=counter_1-1;counter1>=0;counter1--)
{
f=fopen("StageStatistics.txt", "r");
while ((c=getc(f))!=EOF)
{
//printf("%c",c);
if (c=='\n')
{
ntab=0;
y=0;
gg=0;
hh=0;
ii=0;
jj=0;
kk=0;
if (strcmp(personID,"PersonID")==0)
continue;
else
{
if (strcmp(IDnTimeArray[counter1].ID,personID)==0)
{
++newlineCounter1;
if (newlineCounter1==1)
{
strcpy(IDnTimeArray[counter1].previousEdate,eDate);
strcpy(IDnTimeArray[counter1].previousEtime,eTime);
}
strptime(IDnTimeArray[counter1].previousEdate, "%d.%m.%Y", IDnTimeArray[counter1].ptr);
strptime(IDnTimeArray[counter1].previousEtime, "%H:%M:%S", IDnTimeArray[counter1].ptr);
IDnTimeArray[counter1].ptr->tm_isdst=-1;
IDnTimeArray[counter1].t=mktime(IDnTimeArray[counter1].ptr);
strptime(sDate, "%d.%m.%Y", ptr1);
strptime(sTime, "%H:%M:%S", ptr1);
ptr1->tm_isdst=-1;
t1=mktime(ptr1);
strptime(eDate, "%d.%m.%Y", ptr2);
strptime(eTime, "%H:%M:%S", ptr2);
ptr2->tm_isdst=-1;
t2=mktime(ptr2);
if(difftime((time_t)t1, (time_t)IDnTimeArray[counter1].t)>0)
{
timediff1=difftime((time_t)t1,(time_t)IDnTimeArray[counter1].t);
remainder1=timediff1%60;
pushBackCounter1=(timediff1-remainder1)/60;//printf("\n%d\n",pushBackCounter1);
for (z=0;z<pushBackCounter1;z++)
{
IDnTimeArray[counter1].s.push_back(&Activity);
//printf("a");
}
}
timediff2=difftime((time_t)t2,(time_t)t1);
remainder2=timediff2%60;
pushBackCounter2=(timediff2-remainder2)/60;
for (z=0;z<pushBackCounter2;z++)
{
if (strcmp(mode,"walk")==0)
{IDnTimeArray[counter1].s.push_back(&Walk);}//printf("w");}
if (strcmp(mode,"bike")==0)
{IDnTimeArray[counter1].s.push_back(&Bike);}//printf("b");}
if (strcmp(mode,"car")==0)
{IDnTimeArray[counter1].s.push_back(&Car);}//printf("c");}
if (strcmp(mode,"urbanPuT")==0)
{IDnTimeArray[counter1].s.push_back(&UrbanPuT);}//printf("u");}
if (strcmp(mode,"rail")==0)
{IDnTimeArray[counter1].s.push_back(&Rail);}//printf("r");}
if (strcmp(mode,"notdecided")==0)
{IDnTimeArray[counter1].s.push_back(&Notdecided);}//printf("n");puts(personID);}
}
strcpy(IDnTimeArray[counter1].previousEdate,eDate);
strcpy(IDnTimeArray[counter1].previousEtime,eTime);
}
}
}
else if (c=='\t')
{
++ntab;
personID[y]='\0';
sDate[gg]='\0';
sTime[hh]='\0';
eDate[ii]='\0';
eTime[jj]='\0';
mode[kk]='\0';
}
else
{
if (ntab==0)
{
personID[y]=c;
++y;
}
if (ntab==8)
{
sDate[gg]=c;
++gg;
}
if (ntab==9)
{
sTime[hh]=c;
++hh;
}
if (ntab==14)
{
eDate[ii]=c;++ii;
}
if (ntab==15)
{
eTime[jj]=c;++jj;
}
if (ntab==21)
{
mode[kk]=c;++kk;
}
}
}
fclose(f);
newlineCounter1=0;
strcpy(interview_data_file, interview_data_file_header);
strcat(interview_data_file, IDnTimeArray[counter1].ID);
strcat(interview_data_file,".txt");
puts(interview_data_file);
f1=fopen(("%s",interview_data_file),"r");
newlineCounter=0;
strcpy(ipreviousEdate, "a");
strcpy(ipreviousEtime, "a");
while ((d=getc(f1))!=EOF)
{
if (d=='\n')
{ ++newlineCounter;
intab=0;
ggg=0;
hhh=0;
iii=0;
jjj=0;
kkk=0;
if (strcmp(isDate,"StartingDate")==0)
continue;
else
{
if (newlineCounter==2)
{
strcpy(ipreviousEdate, ieDate);
strcpy(ipreviousEtime, ieTime);//puts(ipreviousEtime);
}
strptime(isDate, "%d.%m.%Y", ptr3);//puts(isDate);
strptime(isTime, "%H:%M:%S", ptr3);//puts(isTime);
ptr3->tm_isdst=-1;
t4=mktime(ptr3);//printf("%d\n",t4);
strptime(ieDate, "%d.%m.%Y", ptr4);//puts(ieDate);
strptime(ieTime, "%H:%M:%S", ptr4);//puts(ieTime);
ptr4->tm_isdst=-1;
t5=mktime(ptr4);//printf("%d\n",t5);
strptime(ipreviousEdate, "%d.%m.%Y", ptr5);//puts(ipreviousEdate);
strptime(ipreviousEtime, "%H:%M:%S", ptr5);//puts(ipreviousEtime);
ptr5->tm_isdst=-1;
t6=mktime(ptr5);//printf("%d\n",t4);
if(difftime((time_t)t4, (time_t)t6)>0)
{
timediff3=difftime((time_t)t4,(time_t)t6);
remainder3=timediff3%60;
pushBackCounter3=(timediff3-remainder3)/60;
for (z=0;z<pushBackCounter3;z++)
{
IDnTimeArray[counter1].g.push_back(&Activity);//printf("a");
}
}
//printf("@@@");
timediff4=difftime((time_t)t5,(time_t)t4);
remainder4=timediff4%60;
pushBackCounter4=(timediff4-remainder4)/60;
for (z=0;z<pushBackCounter4;z++)
{
if (strcmp(imode,"walk")==0)
{IDnTimeArray[counter1].g.push_back(&Walk);}//printf("w");}
if (strcmp(imode,"bike")==0)
{IDnTimeArray[counter1].g.push_back(&Bike);}//printf("b");}
if (strcmp(imode,"car")==0)
{IDnTimeArray[counter1].g.push_back(&Car);}//printf("c");}
if (strcmp(imode,"urbanPuT")==0)
{IDnTimeArray[counter1].g.push_back(&UrbanPuT);}//printf("u");}
if (strcmp(imode,"rail")==0)
{IDnTimeArray[counter1].g.push_back(&Rail);}//printf("r");}
}
strcpy(ipreviousEdate, ieDate);
strcpy(ipreviousEtime, ieTime);
}
}
else if (d=='\t')
{
++intab;
isDate[ggg]='\0';
isTime[hhh]='\0';
ieDate[iii]='\0';
ieTime[jjj]='\0';
imode[kkk]='\0';
}
else
{
if (intab==4)
{
isDate[ggg]=d;
++ggg;
}
if (intab==5)
{
isTime[hhh]=d;
++hhh;
}
if (intab==9)
{
ieDate[iii]=d;++iii;
}
if (intab==10)
{
ieTime[jjj]=d;++jjj;
}
if (intab==11)
{
imode[kkk]=d;++kkk;
}
}
}
UniSAM mySAM;
IDnTimeArray[counter1].dist = mySAM.getDistance(IDnTimeArray[counter1].s, IDnTimeArray[counter1].g);
totalDist=totalDist+IDnTimeArray[counter1].dist;
cerr << "Distance: " << IDnTimeArray[counter1].dist << endl;
// cerr << endl;
IDnTimeArray[counter1].dist = mySAM.getDistance(IDnTimeArray[counter1].g, IDnTimeArray[counter1].s);
// cerr << "Distance reversed: " << IDnTimeArray[counter1].dist << endl;
IDnTimeArray[counter1].s.clear();
IDnTimeArray[counter1].g.clear();
}
fprintf(f3,"%d\n",totalDist);
printf("%d\n",totalDist);
return 0;
}