1. 程式人生 > 程式設計 >c/c++ 利用sscanf進行資料拆分操作

c/c++ 利用sscanf進行資料拆分操作

sscanf使用示例

示例:使用sscanf分割檔案中的資料,資料來源示例如下

川EZ1E58,貴GQ7708,:1302

貴AE0996,:185

貴A0PJ06,貴JYN192,:128

分割程式碼如下所示:

#include <stdio.h>
#include <string.h>
int DealLine(char *StrLine)
{
 // find : data save
 char Parkid[20] = "";
 char *p = StrLine;
 char *prt = StrLine;
 char carNum[20] = "";
 if(p = strstr(p,":"))
 {
 p = p + 1;
 strncpy(Parkid,p,20);
 printf("Parkid == %s",Parkid);
 }else{
 return -1;
 }
 char endflag = 0;
 while(1){
 endflag = *prt; 
 if(endflag == 58)
 {
  return 0;
 }
 memset(carNum,20);
 sscanf(prt,"%[^,]",carNum);
 prt = strstr(prt,",");
 prt = prt + 1;
 printf("carNum = %s \n",carNum); 
 }
}
 
int main(void)
{
 FILE *fp; 
 
 char StrLine[1024] = "";
 fp = fopen("./test1.txt","r"); //判斷檔案是否存在及可讀
 if(fp == NULL)
 {
 printf("open fail");
 return -1;
 }
 while(!feof(fp)){
 fgets(StrLine,1024,fp); //讀取一行
 printf("\n\n\n");
 printf("%s\n",StrLine);
 int ret = DealLine(StrLine);
 }
 fclose(fp);
 return 0;
}

補充知識:sscanf從字串中按照指定格式提取資料

我們在學習C語言的時候,一定都使用過scanf函式,它表示從標準輸入中按照指定格式接收資料到變數。實際程式設計中,我們常常希望能從字串中,提取想要的資料時,此時我們就可以派上sscanf函數了.

sscanf

sscanf 函式宣告如下:

int sscanf( const char* str,const char* format,... );

它表示從字串str中按照format格式提取資料到指定變數中。

sprintf

常常和sscanf配合使用的是sprintf函式,其函式宣告如下:

int sprintf(char *buffer,const char *format,...);

它表示提取變數中的資料按照指定格式組裝成一個字串。

用例

//提取姓名和年齡
char sentence[] = "Rudolph is 12 years old";
char name[20]  = {};
int age = 0;
sscanf(sentence,"%s is %d",name,&age);
printf("name : %s age: %d\n",age);
//將字串進行每兩位進行分割,最後一位分割為是一位數.
const char*   pszClassID   = "1234070809001";
unsigned char  ucFillMsg[128] = {};
char      szSrcMsg[128]  = {};
sscanf(pszClassID,"%2d%2d%2d%2d%2d%2d%1d",&ucFillMsg[0],&ucFillMsg[1],&ucFillMsg[2],&ucFillMsg[3],&ucFillMsg[4],&ucFillMsg[5],&ucFillMsg[6]);
//還原為字串,不足兩位左邊補0
sprintf(szSrcMsg,"%02d%02d%02d%02d%02d%02d%01d",ucFillMsg[0],ucFillMsg[1],ucFillMsg[2],ucFillMsg[3],ucFillMsg[4],ucFillMsg[5],ucFillMsg[6]);
printf("src string : %s\n",szSrcMsg);
if (strcmp(pszClassID,szSrcMsg) == 0)
{
  printf("ok\n");
}
//提取每個IP值
const char*   pszIP    = "192.168.45.11";
unsigned char  ucIPAddr[4] = {};
sscanf(pszIP,"%d.%d.%d.%d",&ucIPAddr[0],&ucIPAddr[1],&ucIPAddr[2],&ucIPAddr[3]);
for (size_t i = 0; i < 4; i++)
{
  printf("ip element[%d] : %d\n",i,ucIPAddr[i]);
}

執行結果:

name : Rudolph age: 12
src string : 1234070809001
ok
ip element[0] : 192
ip element[1] : 168
ip element[2] : 45
ip element[3] : 11

以上這篇c/c++ 利用sscanf進行資料拆分操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。