在C中解析数据格式

时间:2016-02-11 10:46:42

标签: c char printf

我是C的新人,所以我以前从未这样做过。 我正在做的是打开一个文件,解析数据并将结果打印在另一个文件中。 假设文件打开(在main函数中)是正常的,现在我使用strtok()函数来破坏标记中的字符串。

使用上面的函数,我得到一个这样的输出文件:

{"date": "11:20:50.359", "date": "08-02-16"}

但我想要的是获取数据:

{"date": "11:20:50.359 08-02-16"}

这是我的代码:

void tokenize( char *oneline, FILE *fileName){

   const char delimiter[6] = DELIMITER__;
   char *token;
   int counter = 0;

   /* get the first token */
   token = strtok(oneline, delimiter);

   char time_str[50];
   char date_str[50];

   /* walk through other tokens */
   while( token != NULL ) { 

     if (counter == 1 ){
    char * strA = "\"", * strB = ":", str[50], strC[50], strD[50];
    int v = 0, x = 3, y = 6, z=13;

    strncpy(str,token,v);
    str[v] = '\0';
    strcat(str,strA);
    strcat(str,token+v);

    strncpy(strC,str,x);
    strC[x] = '\0';
    strcat(strC,strB);
    strcat(strC,str+x);

    strncpy(strD,strC,y);
    strD[y] = '\0';
    strcat(strD,strB);
    strcat(strD,strC+y);

    strncpy(time_str,strD,z);
    time_str[z] = '\0';
    strcat(time_str,strA);
    strcat(time_str,strD+z);    

        fprintf(fileName, "%s", "\"date\": ");
        fprintf(fileName,"%s, ", time_str);
     }

     if (counter == 9 ){ 
    char * strA = "\"", * strB = "-", str[50], strC[50], strD[50];
    int v = 0, x = 3, y = 6, z=9;

    strncpy(str,token,v);
    str[v] = '\0';
    strcat(str,strA);
    strcat(str,token+v);

    strncpy(strC,str,x);
    strC[x] = '\0';
    strcat(strC,strB);
    strcat(strC,str+x);

    strncpy(strD,strC,y);
    strD[y] = '\0';
    strcat(strD,strB);
    strcat(strD,strC+y);

    strncpy(date_str,strD,z);
    date_str[z] = '\0';
    strcat(date_str,strA);
    strcat(date_str,strD+z);    

        fprintf(fileName, "%s", "\"date\": ");
        fprintf(fileName,"%s", date_str);
     }

      token = strtok(NULL, delimiter);
      ++counter;
   }
}

如果有人能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先解析3 time_str,然后打印出来:

date_str