int main(int argc, char **argv)
{
  int i, currentNebUser, currentUserMessage, matches = 0;
  /* print usage if needed */
  if (argc != 1)
  {
    fprintf(stderr, "No args needed");
    exit(0);
  }

  char filename[1024];
  FILE *file = NULL, *fp = NULL, *userFile = NULL, *messageFile = NULL;

  sprintf(filename, "../../Data/tableinfo.dat");
  file = fopen(filename, "rb");

  int locationNum, userNum, messageNum;
  fread(&locationNum, sizeof(int), 1, file);
  fread(&userNum, sizeof(int), 1, file);
  fread(&messageNum, sizeof(int), 1, file);
  fclose(file);

  struct timeval time_start, time_end;

  int matchingRecords = 0;
  char *matchString = "Nebraska";

  /* start time */
  gettimeofday(&time_start, NULL);

  // Get list of NE cities
  int nebraskaStart, nebraskaEnd;
  nebraskaStart = findLocationEdge(0, locationNum, matchString, -1, 0);
  nebraskaEnd = findLocationEdge(0, locationNum, matchString, 1, locationNum);
  //printf("NE Start: %d, NE End: %d", nebraskaStart, nebraskaEnd);

  for (i = nebraskaStart; i <= nebraskaEnd; i++)
  {
    /* open the corresponding file */
    sprintf(filename, "../../Data/Locations/location_%06d.dat", i);

    fp = fopen(filename,"rb");

    if (!fp) {
      fprintf(stderr, "Cannot open %s\n", filename);
      exit(0);
    }

    // Get location id from NE cities
    location_t *loc = read_location(fp);
    //printf("%s, %s\n", loc->city, loc->state);
    fclose(fp);

    //printf("%s, %s\n", loc->city, loc->state);

    // Get list of users from NE cities
    int firstNebUserAtLocation, lastNebUserAtLocation;
    firstNebUserAtLocation = findUserEdge(0, userNum, loc->locationID, -1, 0);
    lastNebUserAtLocation = findUserEdge(0, userNum, loc->locationID, 1, userNum);
    //printf("  Start: %i, End: %i\n", firstNebUserAtLocation, lastNebUserAtLocation);

    // foreach user locationStart to locationEnd
    for (currentNebUser = firstNebUserAtLocation; currentNebUser <= lastNebUserAtLocation; currentNebUser++)
    {
      // open user file at current ID in loop
      sprintf(filename, "../../Data/Users/user_%06d.dat", currentNebUser);
      userFile = fopen(filename, "rb");

      if (!userFile) {
        fprintf(stderr, "Cannot open %s\n", filename);
        exit(0);
      }

      // Get userid from NE users
      user_t *usr = read_user(userFile);
      fclose(userFile);

      // get list of messages from NE users
      int firstUserMessage, lastUserMessage;
      firstUserMessage = findMessageEdge(0, messageNum, usr->id, -1, 0);
      lastUserMessage = findMessageEdge(0, messageNum, usr->id, 1, messageNum);
     // printf("    UserMessages Start: %i, End: %i\n", firstUserMessage, lastUserMessage);
      if(firstUserMessage == -1 && lastUserMessage == -1)
      {
	printf("Warning, no messages found for user %i\n", usr->id);
      }
      else
      {
        int criteriaMatch = 0;
        // foreach message associated with current user id
        for (currentUserMessage = firstUserMessage; currentUserMessage <= lastUserMessage; currentUserMessage++)
        {
          // open message file
          sprintf(filename, "../../Data/Messages/message_%07d.dat", currentUserMessage);
          messageFile = fopen(filename, "rb");

          if (!messageFile) {
            fprintf(stderr, "Cannot open %s\n", filename);
            exit(0);
          }

          message_t *msg = read_message(messageFile);
          fclose(messageFile);

          // check time; increment
          if (msg->hour == 8 || ((msg->hour == 9) && (msg->minute == 0)))
          {
            criteriaMatch = 1;
            break;
          }
        }
	if (criteriaMatch == 1)
	{
          matchingRecords++;
	}
      }
    }

    free_location(loc);
  }

  /* end time */
  gettimeofday(&time_end, NULL);

  float totaltime = (time_end.tv_sec - time_start.tv_sec)
  + (time_end.tv_usec - time_start.tv_usec) / 1000000.0f;

  printf("\n\nMatching Records %i\n", matchingRecords);
  printf("\n\nProcess time %f seconds\n", totaltime);

  return 0;
}
Ejemplo n.º 2
0
void	ingredients()
{
	show_ingredients();
	read_user();
}