Analizar una cadena en Arduino

Ammar Ali 12 octubre 2023
  1. Analizar una cadena usando la función strtok() en Arduino
  2. Analizar una cadena usando la función subcadena () en Arduino
Analizar una cadena en Arduino

Este tutorial analizará el análisis de una cadena utilizando las funciones strtok() y substring() en Arduino.

Analizar una cadena usando la función strtok() en Arduino

Una cadena puede contener caracteres, números y símbolos en Arduino. Podemos usar la función strtok() en Arduino para separar o analizar una cadena.

Por ejemplo, si tenemos una cadena con subcadenas separadas por una coma, queremos separar cada subcadena usando la coma y guardar cada subcadena como una cadena o matriz de caracteres separada.

Sintaxis:

char *s = strtok(char *MyS, char *MyD);

En el código anterior, MyS es una variable de carácter constante que contiene la cadena que queremos analizar, y MyD también es una variable de carácter constante que contiene el delimitador, carácter o símbolo que debemos usar para analizar el cadena dada. La función strtok() devolverá el primer token o la matriz de caracteres antes del delimitador dado.

Tenemos que pasar NULL en lugar de la cadena dada para obtener el segundo token de cadena porque la cadena dada excluyendo el primer token se guardará en la función strtok().

Por ejemplo, definamos una cadena de caracteres y sepárela usando el delimitador y la función strtok().

char *MyS = "this is-delftstack.com-website";
char *MyD = "-";
void setup() {
  Serial.begin(9600);

  char *s = strtok(MyS, MyD);
  Serial.println(s);
  char *s1 = strtok(NULL, MyD);
  Serial.println(s1);
  char *s2 = strtok(NULL, MyD);
  Serial.println(s2);
}
void loop() {}

Producción :

this is
delftstack.com
website

En el código anterior, usamos la función strtok() tres veces para obtener los tres tokens presentes en la cadena dada, y cada token de cadena se almacenará dentro de una matriz de caracteres. También podemos usar un ciclo para obtener todos los tokens disponibles presentes en la cadena dada para que no tengamos que escribir el código repetidamente.

Escribimos el código dentro de la función setup(), que se ejecutará solo una vez cuando encendemos la placa Arduino, pero en caso de una cadena grande, podemos escribir el código dentro de la función loop() para que se repita. Obtendremos el primer token dentro de la función setup() y comprobaremos si el siguiente token está disponible dentro de la función loop().

Si está disponible, lo almacenaremos dentro de una matriz y repetiremos el procedimiento hasta que no queden más tokens de cadena dentro de la cadena dada.

Por ejemplo, usemos la cadena anterior y busquemos todos los tokens de cadena disponibles usando el mismo delimitador anterior.

char *MyS = "this is-delftstack.com-website-Welcome";
char *MyD = "-";
char *MyArray[10];
int i = 1;
void setup() {
  Serial.begin(9600);

  char *s = strtok(MyS, MyD);
  Serial.println(s);
  MyArray[0] = s;
}
void loop() {
  char *s1 = strtok(NULL, MyD);
  if (s1 != NULL) {
    MyArray[i] = s1;
    Serial.println(MyArray[i]);
    i = i + 1;
  }
}

Producción :

this is
delftstack.com
website
Welcome

En el código anterior, inicializamos la matriz con el tamaño 10, que se usará para almacenar los tokens de cadena. Podemos inicializarlo de acuerdo con los tokens de cadena presentes en la cadena dada.

También inicializamos el índice, que se usará para almacenar valores dentro de la matriz. Lo incrementaremos dentro de la función loop().

Usamos una declaración if para verificar si el token de cadena es NULL o no. Si no es NULL, lo almacenaremos dentro de la matriz e incrementaremos el índice.

Tenga en cuenta que el ciclo debe repetirse para encontrar el siguiente token de cadena. Podemos colocar un bucle dentro de la función setup() si queremos obtener todos los tokens antes de la función loop().

Tendremos todos los tokens de cadena almacenados dentro de la matriz antes de pasar a la función loop(). El delimitador puede ser cualquier carácter, símbolo o número presente en la cadena dada, y también podemos usar el espacio como delimitador.

Analizar una cadena usando la función subcadena () en Arduino

También podemos usar la función substring() en Arduino para separar o analizar una cadena. De acuerdo con los valores de índice dados, la subcadena() separa una subcadena de la cadena dada.

Por ejemplo, si queremos obtener los primeros cinco caracteres de una cadena, podemos usar la función substring() y el valor de índice 5.

Sintaxis:

String s = MyS.substring(SIndex, EIndex);

En el código anterior, s es la variable de cadena utilizada para almacenar la salida de la función substring() y MyS es la cadena dada con un tipo de datos de cadena. El SIndex es el índice inicial y el EIndex es el índice final de la subcadena.

Por ejemplo, creemos una cadena y busquemos su subcadena en el índice 0 a 5.

String MyS = "this is delftstack.com website Welcome";

void setup() {
  Serial.begin(9600);
  String s = MyS.substring(0, 5);
  Serial.println(s);
}
void loop() {}

Producción :

this

En el código anterior, usamos el monitor serial de Arduino para mostrar el resultado. Como puede ver en la salida, los primeros cinco caracteres o índices se muestran en la ventana del monitor serie.

Solo podemos ver cuatro caracteres en la salida porque el quinto carácter es el carácter de espacio. Si no conocemos el índice de un carácter, podemos usar la función indexOf() para obtener el índice de ese carácter.

Sintaxis de la función indexOf():

int MyI = MyS.indexOf(char);

En el código anterior, la variable MyI almacenará la salida, que es el índice del carácter dado, y char es el carácter cuyo índice queremos encontrar. El MyS es la variable de cadena que contiene la cadena dada.

Por ejemplo, tenemos una cadena de palabras separadas por un espacio y queremos obtener la primera palabra de la cadena. Podemos usar la función indexOf() para encontrar el índice del carácter de espacio y luego pasar ese índice dentro de la función substring() para obtener la primera palabra.

String MyS = "this is delftstack.com website Welcome";

void setup() {
  Serial.begin(9600);
  int MyI = MyS.indexOf(" ");
  String s = MyS.substring(0, MyI);
  Serial.println(s);
}
void loop() {}

Producción :

this

Como puede ver en el resultado anterior, extrajimos la primera palabra de la cadena dada. Si queremos obtener todo el mundo de la cadena dada, debemos usar un ciclo.

También podemos pasar un segundo argumento dentro de la función indexOf() para establecer la posición inicial, que se usará para buscar el índice del carácter dado.

Por ejemplo, en el ejemplo anterior, si queremos obtener las dos primeras palabras de la cadena, podemos establecer el valor del índice inicial en 5, y la función devolverá el valor del índice del segundo delimitador, que podemos usar para extraer las dos primeras palabras.

Escribimos el código dentro de la función setup() en el código anterior, que solo se ejecutará una vez. Pero si escribimos el código dentro de la función loop(), el código se repetirá.

Podemos escribir el código dentro de la función loop() para encontrar todas las subcadenas presentes en la cadena dada.

Por ejemplo, busquemos todas las subcadenas presentes en la cadena anterior.

String MyS = "this is delftstack.com website Welcome";
int MyP = 0;
int MyI = 0;
String array[10];
int index = 0;
void setup() { Serial.begin(9600); }
void loop() {
  if (MyI >= 0) {
    MyI = MyS.indexOf(" ", MyP);
    String s = MyS.substring(MyP, MyI);
    Serial.println(s);
    MyP = MyI + 1;
    array[index] = s;
    Serial.println(array[index]);
    index = index + 1;
  }
}

Producción :

this
is
delftstack.com
website
Welcome

En el código anterior, usamos el valor de índice del delimitador dado dentro de la instrucción if para comprobar si se alcanza el final de la cadena dada porque la función indexOf() devolverá un valor negativo si el índice que pasamos dentro de la función indexOf() excede la longitud de la cadena dada.

Hemos inicializado dos variables enteras, MyP y MyI, que se utilizarán para los valores de índice anteriores y actuales.

Usaremos MyP o el valor de índice anterior para obtener MyI o el valor de índice siguiente, y luego usaremos estos valores para encontrar la subcadena. Después de eso, cambiaremos el valor del MyP o índice anterior al índice actual más uno para que la próxima vez se repita el bucle; obtendremos la siguiente palabra.

También hemos inicializado una matriz de cadenas de tamaño 10 para almacenar las subcadenas según el valor del índice. Incrementaremos el índice en la declaración if para guardar la siguiente subcadena en el siguiente valor de índice.

Tenga en cuenta que el ciclo debe repetirse para obtener todas las subcadenas presentes en la cadena dada. Podemos emplear un bucle dentro de la función setup () si queremos obtener las subcadenas antes de iniciar la función loop().

Usamos el espacio como delimitador en los ejemplos anteriores, pero podemos usar cualquier carácter, símbolo y número para analizar la cadena dada. Las funciones indexOf() y substring() pertenecen a la clase de cadena de Arduino y para obtener más detalles sobre la clase de cadena, consulte este enlace.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Artículo relacionado - Arduino String