[Arduino] 逗號分隔文本到數組的兩種方法


以下是今日練習通過逗號來分割字符數組/字符串的2個例子和方法“

1.通過indexOf函數

/*
*Splitsplit sketch
*split a comma-separated string
*/

String message = "Peter,Paul,Mary";
int commaPosition;

void setup(){
  Serial.begin(9600);
}

void loop(){
   Serial.println(message);
   do{
      commaPosition = message.indexOf(',');
      if(commaPosition != -1)
      {
         Serial.println(message.substring(0,commaPosition));
         message=message.substring(commaPosition+1,message.length()); 
       //  Serial.println(message);
      }
      else{
        if(message.length()>0){
           Serial.println(message);
        }
      }
   }
   while(commaPosition>=0);
  // if(message=="Mary")
  // while(1);
   delay(5000);
}

 

2.通過strtok_r函數

/**
*SplitSplit sketch
*split a commaPosition string
**/

const int MAX_STRING_LEN = 20;
char stringList[] = "Peter,Paul,Mary";
char stringBuffer[MAX_STRING_LEN+1];

void setup(){
  Serial.begin(9600);
}

void loop(){
  char *str;
  char *p;
  strncpy(stringBuffer,stringList,MAX_STRING_LEN);
  Serial.println(stringBuffer);
  for(str=strtok_r(stringBuffer,",",&p); //split using comma
     str;   //loop while str is not null
     str = strtok_r(NULL,",",&p) //get subsequent tokens
     ){
     Serial.println(str);
     if(strcmp(str,"Paul")==0)
        Serial.println("found Paul"); 
     }

     delay(5000);
}

/* strtok_r()
str=strtok_r(stringBuffer,",",&p) //把stringBuffer按逗號拆分,
//拆分后數值首地址付給指針p,數值賦值給指針str
*/

提取逗號中數值:

/*
*SplitSplit sketch
*Split a comma-separted string
*/
const int MAX_STRING_LEN =20;
char stringList[] = "H,10,1050,15000,/r/n";
char stringBuffer[MAX_STRING_LEN + 1];
void setup(){
  Serial.begin(9600);
}

void loop(){
  char *str;
  char *p;
  char index = 0;
  strncpy(stringBuffer,stringList,MAX_STRING_LEN);
  Serial.println(stringBuffer);
  for(str=strtok_r(stringBuffer,",",&p);
     str;
     str=strtok_r(NULL,",",&p)
     )
   {
     index ++;
     Serial.println(str);
     if(strcmp(str,"H")==0)
        Serial.println("found HEADER");
       
        Serial.println();
       
        if(strlen(str)==2){  //if not 2 digital,it is easy to error
          Serial.print("value1 = " );
          Serial.println(str);}
       
         if(index==3){
          Serial.print("value2 = " );
          Serial.println(str);} 
         
         if(index==4){
          Serial.print("value3 = " );
          Serial.println(str);}    
         
     }
   
    delay(50000);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM