array.c

来源:互联网 发布:淘宝欢迎话术 编辑:程序博客网 时间:2024/04/29 11:30

#include "server.h"

void print_cell_database(CELL_INFO cell_database[])
{
 int i = 0, j = 0;
 while(cell_database[i].CGI)
 {
  printf("cell_database[%d].CGI = %d\ncell_database[%d].Busy_Hour = %d\n",i,cell_database[i].CGI,i,cell_database[i].Busy_Hour);
  for(j = 0; j < 3; j++)
  {
   printf("cell_database[%d].SSID[%d] = %s\n", i, j, cell_database[i].SSID[j]);
  }
  i++;
  j = 0;
 }
}

void print_wlan_database(WLAN_INFO wlan_database[])
{
 int i = 0;
 while(strlen(wlan_database[i].BSSID))
 {
  printf("wlan_database[%d].BSSID = %s \nwlan_database[%d].GPS_Pos.latitude = %s \nwlan_database[%d].GPS_Pos.longtitude = %s \nwlan_database[%d].SSID = %s \n"
   "wlan_database[%d].CGI = %d \nwlan_database[%d].Busy_Hour = %d \nwlan_database[%d].High_Quality_Num = %d\nwlan_database[%d].Low_Quality_Num = %d\n"
   "wlan_database[%d].Middle_Quality_Num = %d\nwlan_database[%d].Quality_Level = %d\n",
   i,wlan_database[i].BSSID,i,wlan_database[i].GPS_Pos.latitude,i,wlan_database[i].GPS_Pos.longtitude,i,wlan_database[i].SSID,
   i,wlan_database[i].CGI,i,wlan_database[i].Busy_Hour,i,wlan_database[i].High_Quality_Num,i,wlan_database[i].Low_Quality_Num,
   i,wlan_database[i].Middle_Quality_Num,i,wlan_database[i].Quality_Level);
  i++;
 }
}

//PCELL_INFO cell_data_init(PCELL_INFO cell_data)
void cell_data_init(PCELL_INFO cell_data)
{
 printf("Please Input CELL_DATA : CGI & BUSY\n");
 scanf("%d,%d",&cell_data->CGI,&cell_data->Busy_Hour);
// printf("cell_data.CGI = %d\ncell_data.Busy_Hour = %c\n", cell_data->CGI, cell_data->Busy_Hour);
}

void wlan_data_init(PWLAN_INFO wlan_data)
{
 printf("Please Input WLAN_DATA : BSSID & CGI & BUSY\n");
 scanf("%s",wlan_data->BSSID);
 scanf("%d,%d",&wlan_data->CGI,&wlan_data->Busy_Hour);
 printf("wlan_data.BSSID = %s\nwlan_data.CGI = %d\nwlan_data.Busy_Hour = %d\n", wlan_data->BSSID,wlan_data->CGI,wlan_data->Busy_Hour);
}

/* 将小区信息或者WLAN热点信息结构体存入数据库中 */
void insert_info2database(void* database,  void* data, char flag)
{
 int i = 0, j = 0;
 switch(flag)
 {
 /* 往小区信息数据库里插入小区信息,当小区编号重叠是对小区信息进行替换 */
 case CELL_DATABASE: 
  {
   PCELL_INFO cell_database = database;
   PCELL_INFO cell_data = data;
   //printf("Enter into cell_database\n");
   while(cell_database[i].CGI)
   {
    if(cell_database[i].CGI == cell_data->CGI)
    {
     cell_database[i].Busy_Hour = cell_data->Busy_Hour;
     for(j = 0; j < 3; j++)
     {
      strcpy(cell_database[i].SSID[j], cell_data->SSID[j]);
     }
     break;
    }
    i++;
    if(CELL_INFO_DATABASE_SIZE < i)
     return -1;
   }
   if(0 == cell_database[i].CGI)
   {
    cell_database[i].CGI  = cell_data->CGI;
    cell_database[i].Busy_Hour = cell_data->Busy_Hour;
    for(j = 0; j < 3; j++)
    {
     strcpy(cell_database[i].SSID[j], cell_data->SSID[j]);
    }
   }
   break;
  }
 /* 往WLAN热点信息数据库里插入WLAN热点信息,当WLAN热点编号重叠是对WLAN热点信息进行替换 */
 case WLAN_DATABASE:
  {
   PWLAN_INFO wlan_database = database;
   PWLAN_INFO wlan_data = data;
   i = 0;
   //printf("Enter into wlan_database\n");
   while(strlen(wlan_database[i].BSSID))
   {
    if(0 == strcmp(wlan_database[i].BSSID,wlan_data->BSSID))
    {
     wlan_database[i].Busy_Hour          = wlan_data->Busy_Hour;
     wlan_database[i].CGI                = wlan_data->CGI;
     wlan_database[i].GPS_Pos       = wlan_data->GPS_Pos;
     wlan_database[i].High_Quality_Num   = wlan_data->High_Quality_Num;
     wlan_database[i].Low_Quality_Num    = wlan_data->Low_Quality_Num;
     wlan_database[i].Middle_Quality_Num = wlan_data->Middle_Quality_Num;
     wlan_database[i].Quality_Level      = wlan_data->Quality_Level;
     strcpy(wlan_database[i].SSID, wlan_data->SSID);
     break;
    }
    i++;
    if(WLAN_INFO_DATABASE_SIZE < i)
     return -1;
   }
   if(0 == strlen(wlan_database[i].BSSID))
   {
    wlan_database[i].Busy_Hour          = wlan_data->Busy_Hour;
    wlan_database[i].CGI                = wlan_data->CGI;
    wlan_database[i].GPS_Pos            = wlan_data->GPS_Pos;
    wlan_database[i].High_Quality_Num   = wlan_data->High_Quality_Num;
    wlan_database[i].Low_Quality_Num    = wlan_data->Low_Quality_Num;
    wlan_database[i].Middle_Quality_Num = wlan_data->Middle_Quality_Num;
    wlan_database[i].Quality_Level      = wlan_data->Quality_Level;
    strcpy(wlan_database[i].SSID, wlan_data->SSID);
    strcpy(wlan_database[i].BSSID, wlan_data->BSSID);
   }
   break;
  }
 default:
  printf("FOUND NO DATABASE!!!\n");
 }
}

/* 将从文件中取出的字符串进行解析,并将解析后的数据存入小区或者WLAN结构体中 */
void str2data(char* string, void* data, char flag)
{
 char *str = NULL, *p = NULL, *q = NULL, *tmp = NULL, *count = NULL;
 int i = 0;

 str = malloc(200);
 if(NULL == str)
  printf("malloc error\n");
 memset(str, 0, 200);
 strcpy(str, string);


 switch(flag)
 {
 /* 解析第一、第二个字段CGI、Busy_Hour 解析第三、四、五个字段SSID[3] */
 case CELL_DATABASE:
  {
   PCELL_INFO cell_data = data;
   //printf("Enter into cell_database\n");
   /* 解析第一、第二个字段CGI、Busy_Hour */
   for(i = 0; i < 2; i++)
   {
    count = NULL;
    if(0 == i)
     p = str;
    else
     p = tmp + 1;
    tmp = strstr(p,",");
    q = strtok(p, ",");

    switch(i)
    {
    case 0:
     cell_data->CGI = strtol(q, &count, 10);
     // printf("After 1: cell_data->CGI = %d\ntmp = %s", cell_data->CGI, tmp+1);
     break;
    case 1:
     cell_data->Busy_Hour = strtol(q, &count, 10);
     // printf("\nAfter 2: cell_data->Busy_Hour = %d\ntmp = %s", cell_data->Busy_Hour, tmp+1);
     break;
    default:
     printf("error\n");
    }
   }

   /* 解析第三、四、五个字段 */
   for(i = 0; i < 3; i++)
   {
    p = tmp + 1;
    tmp = strstr(p,",");
    if(2 != i)
     q = strtok(p,",");
    else
     q = strtok(p,"\n");
    strcpy(cell_data->SSID[i], q);
    //printf("%s\n", cell_data->SSID[i]);
   }
  }
  break;
 /*  WLAN_INFO解析第0~2个字段BSSID:str[6] GPS_POS:2*str[10] SSID:str[32]
     解析第3~8个字段 CGI、Busy_Hour、High_Quality_Num、Low_Quality_Num、Middle_Quality_Num、Quality_Level */
 case WLAN_DATABASE:
  {
   PWLAN_INFO wlan_data = data;
   //printf("Enter into cell_database\n");
   /* 解析第0~2个字段BSSID:str[6] GPS_POS:2*str[10] SSID:str[32] */
   for(i = 0; i < 4; i++)
   {
    if(0 == i)
     p = str;
    else
     p = tmp + 1;
    tmp = strstr(p,",");
    q = strtok(p, ",");
    switch(i)
    {
    /* 解析第0个字段BSSID */
    case 0:
     strcpy(wlan_data->BSSID, q);
     //printf("After 0: wlan_data->BSSID = %s\ntmp = %s", wlan_data->BSSID, tmp+1);
     break;
    /* 解析第一个字段GPS_Pos.latitude */
    case 1:
     strcpy(wlan_data->GPS_Pos.latitude, q);
     //printf("After 1: wlan_data->GPS_Pos.latitude = %s\ntmp = %s", wlan_data->GPS_Pos.latitude, tmp+1);
     break;
    /* 解析第一个字段GPS_Pos.longtitude */
    case 2:
     strcpy(wlan_data->GPS_Pos.longtitude, q);
     //printf("After 1: wlan_data->GPS_Pos.longtitude = %s\ntmp = %s", wlan_data->GPS_Pos.longtitude, tmp+1);
     break;
    /* 解析第二个字段SSID */
    case 3:
     strcpy(wlan_data->SSID, q);
     //printf("After 2: wlan_data->SSID = %s\ntmp = %s", wlan_data->SSID, tmp+1);
     break;
    default:
     printf("error\n");
    }

   }
   
   /* 解析第3~8个字段 CGI、Busy_Hour、High_Quality_Num、Low_Quality_Num、Middle_Quality_Num、Quality_Level */
   for(i = 0; i < 6; i++)
   {
    count = NULL;
    p = tmp + 1;
    tmp = strstr(p,",");
    if(5 != i)
     q = strtok(p,",");
    else
     q = strtok(p,"\n");
    switch(i)
    {
    /* 解析第3个字段CGI */
    case 0:
     wlan_data->CGI = strtol(q, &count, 10);
     //printf("After 3: wlan_data->CGI = %d\ntmp = %s", wlan_data->CGI, tmp+1);
     break;
    /* 解析第4个字段Busy_Hour */
    case 1:
     wlan_data->Busy_Hour = strtol(q, &count, 10);
     //printf("After 4: wlan_data->Busy_Hour = %d\ntmp = %s", wlan_data->Busy_Hour, tmp+1);
     break;
    /* 解析第5个字段High_Quality_Num */
    case 2:
     wlan_data->High_Quality_Num = strtol(q, &count, 10);
     //printf("After 5: wlan_data->High_Quality_Num = %d\ntmp = %s", wlan_data->High_Quality_Num, tmp+1);
     break;
    /* 解析第6个字段Low_Quality_Num */
    case 3:
     wlan_data->Low_Quality_Num = strtol(q, &count, 10);
     //printf("After 6: wlan_data->Low_Quality_Num = %d\ntmp = %s", wlan_data->Low_Quality_Num, tmp+1);
     break;
    /* 解析第7个字段Middle_Quality_Num */
    case 4:
     wlan_data->Middle_Quality_Num = strtol(q, &count, 10);
     //printf("After 7: wlan_data->Middle_Quality_Num = %d\ntmp = %s", wlan_data->Middle_Quality_Num, tmp+1);
     break;
    /* 解析第8个字段Quality_Level */
    case 5:
     wlan_data->Quality_Level = strtol(q, &count, 10);
     //printf("After 8: wlan_data->Quality_Level = %d\n", wlan_data->Quality_Level);
     break;
    default:
     printf("error\n");
    }
   }
  }
  break;
 default:
  printf("error\n");
 }
 free(str);
}

/* 将小区或WLAN热点信息转换成字符串类型(注意将该字符串输入到文件时要调整文件句柄指向的位置) */
void data2str(char* str, void* data, char flag)
{
 int i = 0;
 switch(flag)
 {
 /* 解析第一、第二个字段CGI、Busy_Hour 解析第三、四、五个字段SSID[3] */
 case CELL_DATABASE:
  {
   PCELL_INFO cell_data = data;
   printf("Enter into cell_database\n");
   i = sprintf(str,"CELL_DATA :%d,%d,%s,%s,%s\n",cell_data->CGI,cell_data->Busy_Hour,cell_data->SSID[0],cell_data->SSID[1],cell_data->SSID[2]);
  }
  break;
 case WLAN_DATABASE:
  { 
   PWLAN_INFO wlan_data = data;
   printf("Enter into cell_database\n");
   i = sprintf(str,"WLAN_DATA :%s,%s,%s,%s,%d,%d,%d\,%d,%d,%d\n",wlan_data->BSSID,wlan_data->GPS_Pos.latitude,wlan_data->GPS_Pos.longtitude,wlan_data->SSID,
    wlan_data->CGI,wlan_data->Busy_Hour,wlan_data->High_Quality_Num,wlan_data->Low_Quality_Num,wlan_data->Middle_Quality_Num,wlan_data->Quality_Level);
  }
  break;
 default:
  printf("error\n");
 }
}

/* 解析第0~2个字段BSSID:str[6] GPS_POS:2*str[10] SSID:str[32] */
/* 解析第3~8个字段 CGI、Busy_Hour、High_Quality_Num、Low_Quality_Num、Middle_Quality_Num、Quality_Level */
void main(int argc, char* argv[])
{
 PCELL_INFO cell_database = NULL;
 PWLAN_INFO wlan_database = NULL;
 PCELL_INFO cell_data = NULL;
 PWLAN_INFO wlan_data = NULL;
 //char pstStr0[] = "aaa,bbb,ccc,ddd\n";
 //char pstStr1[] = "abcd,1234,5678,qqqweeewwweeeww,12345,111,2222,3333,4444,8\n";
 //char pstStr2[] = "333,55,www,666,111\n";

 char str0[100] = {0};
 char str1[100] = {0};
 char str2[100] = {0};
 int i = 0;

 FILE * wlan_stream = NULL;
 FILE * cell_stream = NULL;
 char cell[10] = "cell.csv";
 char wlan[10] = "wlan.csv";
 
 FILE * wlan_fp = NULL;
 FILE * cell_fp = NULL;
 cell_fp = fopen("cell.txt", "a+");
 wlan_fp = fopen("wlan.txt", "a+");

 
 cell_stream = fopen(cell, "a+");
 if(NULL == cell_stream)
 {
  printf("open wlan_stream error\n");
  return -1;
 }
 wlan_stream = fopen(wlan, "a+");
 if(NULL == wlan_stream)
 {
  printf("open cell_stream error\n");
  return -1;
 }

 /* 创建小区信息表和WLAN热点信息表 */
 printf("create cell_info_database and wlan_info_database\n");
 cell_database = malloc(sizeof(CELL_INFO) * CELL_INFO_DATABASE_SIZE);
 if(NULL == cell_database)
 {
  printf("cell_database malloc error\n");
  return -1;  
 }
 memset(cell_database, 0, sizeof(CELL_INFO) * CELL_INFO_DATABASE_SIZE);
 wlan_database = malloc(sizeof(WLAN_INFO) * WLAN_INFO_DATABASE_SIZE);
 if(NULL == wlan_database)
 {
  printf("wlan_info_database malloc error\n");
  return -1;  
 }
 memset(wlan_database, 0, sizeof(WLAN_INFO) * WLAN_INFO_DATABASE_SIZE);

 /* 为临时结构体cell_data和wlan_data分配内存空间 */
 cell_data = malloc(sizeof(CELL_INFO));
 if(NULL == cell_data)
 {
  printf("cell_data malloc error\n");
 }
 memset(cell_data, 0, sizeof(CELL_INFO));
 wlan_data = malloc(sizeof(WLAN_INFO));
 if(NULL == wlan_data)
 {
  printf("wlan_data malloc error\n");
 }
 memset(wlan_data, 0, sizeof(WLAN_INFO));
 
 /* 通过fputs和fgets函数实现字符串在文本中的写入与读出,需要注意完成写操作后需要调用fseek函数将句柄指向文件的起点 */
 //fputs(pstStr0, fp);
 //fputs(pstStr1, fp);
 //fputs(pstStr2, fp);
 /* 返回到文本的起点,并逐行读取字符串 */
 fseek(cell_stream, 0, SEEK_SET);
 while(1)
 {
  
  if(NULL != fgets(str0, 100, cell_stream))
  {
   str2data(str0, cell_data, CELL_DATABASE);
   insert_info2database(cell_database, cell_data, CELL_DATABASE);
   data2str(str2, cell_data, CELL_DATABASE);
   fputs(str2, cell_fp);
  }
  else
   break;
 }
 print_cell_database(cell_database);

 fseek(wlan_stream, 0, SEEK_SET);
 while(1)
 {
  if(NULL != fgets(str1, 100, wlan_stream))
  {
   str2data(str1, wlan_data, WLAN_DATABASE);
   insert_info2database(wlan_database, wlan_data, WLAN_DATABASE);
   data2str(str2, wlan_data, WLAN_DATABASE);
   fputs(str2, wlan_fp);
  }
  else
   break;
 }
 print_wlan_database(wlan_database);


 //fgets(str0, 100, cell_stream); 
 //fgets(str1, 100, cell_stream);
 //fgets(str2, 100, cell_stream); 

 /* 通过fwrite和fread函数实现字符串在文本中的写入与读出,需要注意完成写操作后需要调用fseek函数将句柄指向文件的起点 */
 //fwrite(pstStr0, strlen(pstStr0), 1, fp);
 //fwrite(pstStr1, strlen(pstStr1), 1, fp);
 //fwrite(pstStr2, strlen(pstStr2), 1, fp);
 //fseek(fp, 0, SEEK_SET);
 //fread(str0, strlen(pstStr0), 1, fp);
 //fread(str1, strlen(pstStr1), 1, fp);
 //fread(str2, strlen(pstStr2), 1, fp);

 //printf("Printf the file data\n");
 //printf("str0 : %s\n",str0); 
 //printf("str1 : %s\n",str1);
 //printf("str2 : %s\n",str2);

 //str2data(str2, cell_data, CELL_DATABASE);
 //insert_info2database(cell_database, cell_data, CELL_DATABASE);
 //   data2str(str2, cell_data, CELL_DATABASE);
 //printf("str2 : %s\n",str2);
 //fseek(fp,0,SEEK_END);
 //fputs(str2, fp);
 //print_cell_database(cell_database);

 //str2data(str1, wlan_data, WLAN_DATABASE);
 //insert_info2database(wlan_database, wlan_data, WLAN_DATABASE);
 //data2str(str1, wlan_data, WLAN_DATABASE);
 //printf("str1 : %s\n",str1);
 //fputs(str1, fp);
 //print_wlan_database(wlan_database);

 fclose(cell_stream);
 fclose(wlan_stream);

 fclose(wlan_fp);
 fclose(cell_fp);

 getchar();
}

原创粉丝点击