Arduino sscanf-Funktion
In diesem Tutorial wird das Lesen formatierter Daten aus einem Zeichenarray oder einer Zeichenkette mit der Funktion sscanf()
in Arduino besprochen.
Die Arduino-Funktion sscanf()
Wir können Zahlen, Symbole, Zeichen und andere Daten in einer Text- oder Zeichenfolgendatei speichern. Wir können die Funktion sscanf()
verwenden, um die Daten in einem bestimmten Format aus einem Text-, String- oder Zeichenarray zu lesen.
Die grundlegende Syntax der Funktion sscanf()
ist unten.
sscanf(char *data, char *format, ...);
Im obigen Code enthält data
die angegebene Zeichenfolge oder das Zeichenarray, die wir mit dem im zweiten Argument definierten Format lesen möchten. Nachdem wir das Format definiert haben, können wir die Anzahl der Variablen auflisten, in denen wir die formatierten Daten speichern möchten.
Angenommen, wir haben eine Zeichenfolge, die das Datum eines Ereignisses enthält, und wir möchten Datum, Monat und Jahr trennen und in separaten Variablen speichern. Siehe Code unten.
char *data = "28 April 2022";
int date = 0;
int year = 0;
char month[10];
void setup() {
Serial.begin(9600);
Serial.println(data);
sscanf(data, "%2d %s %4d", &date, month, &year);
Serial.println(date);
Serial.println(month);
Serial.println(year);
}
void loop() {}
Ausgang:
28 April 2022
28
April
2022
Wir haben die Variable data
erstellt, um die angegebene Zeichenfolge im obigen Code zu speichern. Die Variablen date
, year
und month
speichern Tages-, Jahres- und Monatswerte separat.
Wir haben die Variable Monat
mit einer Größe von 10 initialisiert, aber wir können ihre Größe entsprechend der angegebenen Zeichenfolge ändern, die wir in der Variablen speichern möchten. Wir haben die Funktion Serial.begin()
verwendet, um den seriellen Monitor von Arduino zu initialisieren, mit dem wir das Ergebnis anzeigen werden.
Um einen ganzzahligen Wert zu erhalten, verwenden wir das Symbol %d
, und die Zahl 2 damit definiert, wie viele Zahlen wir lesen möchten. Wir verwenden das Symbol %s
, um einen String zu erhalten, der die Zeichen bis zum Leerzeichen zurückgibt.
Wenn in der angegebenen Zeichenfolge kein Leerzeichen vorhanden ist, können wir das %c
und eine Zahl verwenden, um anzugeben, wie viele Zeichen wir lesen möchten. Wir können %s
nicht verwenden, da es keine Leerzeichen gibt, die nicht das erwartete Ergebnis zurückgeben.
Um das Ergebnis nach dem Format als Ganzzahl zu speichern, müssen wir das Symbol &
verwenden, und für einen String oder ein Zeichenarray müssen wir nur den Variablennamen verwenden. Im obigen Beispiel haben wir den Leerraum als Trennzeichen zum Formatieren der Daten verwendet, aber wir können auch beliebige Zeichen, Symbole oder Zahlen verwenden.
Überlegen Sie zum Beispiel, ob wir ein Komma anstelle des Leerzeichens in der Datumszeichenfolge haben.
Um das gewünschte Ergebnis zu extrahieren, müssen wir das Komma innerhalb der Funktion sscanf()
anstelle des Leerzeichens verwenden. Wir müssen auch das Symbol %c
anstelle des Symbols %s
verwenden, da in der Zeichenfolge kein Leerzeichen vorhanden ist.
Lassen Sie uns beispielsweise das obige Beispiel mit einem anderen Trennzeichen wiederholen. Siehe Code unten.
char *data = "28,April,2022";
int date = 0;
int year = 0;
char month[10];
void setup() {
Serial.begin(9600);
Serial.println(data);
sscanf(data, "%2d,%5c,%4d", &date, month, &year);
Serial.println(date);
Serial.println(month);
Serial.println(year);
}
void loop() {}
Ausgang:
28,April,2022
28
April
2022
Wir verwenden das Symbol %5c
innerhalb der Funktion sscanf()
im obigen Code, weil wir nur fünf Zeichen lesen wollen. Wenn wir mehr als fünf Zeichen lesen, ändert sich die nächste Ausgabe.
Wie wir sehen können, ist die Ausgabe dieselbe wie die Ausgabe des ersten Beispiels. Wir können auch andere Symbole zum Formatieren der Daten verwenden, wie %f
für Gleitkommazahlen, %o
für Oktalzahlen, %x
für Hexadezimalzahlen und %u
für eine Ganzzahl ohne Vorzeichen.