c/c+++sscanfを利用してデータの分割操作を行う。


sscanf使用例
例:sscanfを用いてファイル中のデータを分割し、データソースの例は以下の通りである。
川EZ 1 E 58、貴GQ 7708、:1302
貴AE 0909、:185
貴A 0 PJ 06、貴JYN 192、貴JYN 192、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 ,0, 20);
 sscanf(prt,"%[^,]",carNum);
 prt = strstr(prt,",");
 prt = prt + 1;
 printf("carNum = %s 
",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("


"); printf("%s
",StrLine); int ret = DealLine(StrLine); } fclose(fp); return 0; }
補足知識:文字列から指定された形式でデータを抽出する。
私たちはC言語を勉強する時、きっとscanf関数を使ったことがあります。標準入力から指定された形式でデータを変数に受信することを表しています。実際のプログラミングでは、文字列から希望のデータを抽出することができます。sscanfsscanf関数の声明は以下の通りである。
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
", name, 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
", szSrcMsg); if (strcmp(pszClassID, szSrcMsg) == 0) { printf("ok
"); } // 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
", 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を利用してデータを分割して操作します。つまり、小編集は皆さんに全部の内容を共有しています。みなさんに参考にしてもらいたいです。どうぞよろしくお願いします。