Arduino String Split
Når man arbejder med Arduino, så kan det være rart at kunne splitte strenge op i flere dele ved at skille dem ad med et skilletegn.
Det kan være at man ønsker at indlæse en X- og en Y-værdi fra Serial Monitor, men ikke vil indtaste to strenge, med alle de muligheder for fejl der er der. Det kan så gøre ved at man taster strengen 123;654, hvor 123 er X-værdien og 654 er Y-værdien.
Kodeeksempel der tester String Split
Hele kodeeksemplet kan hentes i denne ZIP-fil.
Koden der tester funktionen er lavet som følger:
String stringOne;
String result[10];
void loop() {
if (Serial.available()) {
stringOne = Serial.readStringUntil('\n');
stringOne.trim();
int antal = strSplit(result, stringOne, ':');
Serial.println("Splitting with :");
for (int i = 0; i < antal; i++) {
Serial.println(result[i]);
}
antal = strSplit(result, stringOne, '-');
Serial.println("Splitting with -");
for (int i = 0; i < antal; i++) {
Serial.println(result[i]);
}
}
}
Koden leder først efter input fra Seriel-porten, og når det kommer, så læses en hel linje ind i stringOne.
Når man har linjen, så testes den på to forskellige karakterer. Først splittes strengen op ved karakteren ':', hvor resultatet gemmes i et array af String (maksimalt 10 dele), hvorefter hver del printes ud.
På den samme streng laves derefter samme analyse med strSplit ved karakteren '-', og resultatet printes ud.
Funktionen strSplit()
Funktionen er lidt speciel, da den ikke returnerer de opsplittede strenge direkte - den returnerer i stedet det antal strenge der blev resultatet af spilt-operationen.
Resultatet af split-operationen bliver lagret i den første parameter, der skal være et String-array, som kan indeholde det maksimale antal strenge der ønskes returneret.
Selve funktionen ser ud som følger:
int strSplit(String * res, String txt, char splitChar) {
int pos;
int i = 0;
while (txt.indexOf(splitChar) > 0) {
pos = txt.indexOf(splitChar);
res[i] = txt.substring(0, pos);
i++;
txt = txt.substring(pos + 1);
}
res[i] = txt;
i++;
return i;
}
Funktionen skal have 3 parametre:
- Det array der skal lagre resultatet af split-processen
- Den streng txt, der skal splittes op
- Den karakter der skal splittes ud fra
Funktionen bliver ved med at splitte strenge op, så længe splitkarakteren er til stede i den resterende del af strengen.
Hver gang trækkes der den første del af resten ud, indtil der ikke er flere split-karakterer.
Den sidste del lægges også i resultatet, så selv en streng uden split-karakterer vil returnere en streng.
Til slut returneres det antal strenge der blev fundet.