Arduino String Split: Forskelle mellem versioner

Fra HTX Arduino
Spring til navigation Spring til søgning
m 1 version importeret
Linje 60: Linje 60:
#Den streng txt, der skal splittes op
#Den streng txt, der skal splittes op
#Den karakter der skal splittes ud fra
#Den karakter der skal splittes ud fra
{{Programmering}}


Funktionen bliver ved med at splitte strenge op, så længe splitkarakteren er til stede i den resterende del af strengen.
Funktionen bliver ved med at splitte strenge op, så længe splitkarakteren er til stede i den resterende del af strengen.

Versionen fra 15. nov. 2022, 21:22

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:

  1. Det array der skal lagre resultatet af split-processen
  2. Den streng txt, der skal splittes op
  3. Den karakter der skal splittes ud fra


Programmering
Programmeringsbegreber Initialisering - Sekvens - Algoritme - Hexadecimal - Det Binære Talsystem - HEX-fil - ASCII - Interrupt - Events - Styresystem - Autocomplete - Selvstudie Programmering - Hour Of Code - Stepwise Improvement - Syntaks - Prog-links - Microcontroller - ChatGPT
Grundlæggende C C float - C double - C-løkker - Datatyper - Konstanter - Regnearter - Funktioner - Return - Returværdi - Rekursion - Semikolon
Variabel Typer boolean - byte - int - unsigned int - word - long - unsigned long - short - float - double - char - unsigned char - string - char array - String - object - Array - 2-dimensionelt Array - void
Program-klassikere Polling - State-machine - Trykknap - Forkant - Bagkant - Prel
Arduino Arduino til Programmering - C til Arduino - Programmering Shield - Arduino PC-software - Arduino Udviklingsmiljø - Arduino Pin Library - Funktion - Arduino Seriel - Arduino String - Arduino String Split - Arduino StateChangeDetection - setup() - loop() - Compilerdirektiver - Asynkron kommunikation - millis() - micros() - Scratch for Arduino - Send fra Arduino til Excel - [[]] - [[]]
Processing Grafik i Processing‎ - Keyboard i Processing - Mus i Processing‎ - Tid i Processing‎ - Draw() - Setup() - Tal Input til Processing - Syntaksfarvning - Kommunikation fra Arduino til Processing - Kommunikation fra Processing til Arduino
javaScript Javascript input‎ - Javascript output‎ - Javascript strukturer‎ - Javascript syntaks‎ - Tid i javaScript - Objekt‎ - AJAX
Serverprogrammering PHP - MySQL - Task Scheduler - WeMOS
PIC JAL - [[]]
Scratch for Arduino S4A Installation - S4A programmering - S4A undervisningsforløb - S4A begrænsninger
Program Dokumentation Algoritme - Flowchart - Pseudokode - Datastruktur - Dataabstraktion - Pulsplaner - Program-kommentar - Teori - Test - UML


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.