Fecha de publicado: 26-Jul-2018. Fecha de actualización: 19-Oct-2024.
Programa en Arduino para separar caracteres…
String split = "133,215,365";
void setup() {
Serial.begin(9600);
}
void loop() {
int parte1 = getValue(split,',',0).toInt();
Serial.print(parte1);
delay(1000);
}
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = data.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex){
found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
Actualización (19-oct-2024).
Inicialmente publiqué este código rápidamente porque lo usé en un proyecto en Arduino y quería guardarlo para poder reusarlo en otra ocasión. Ahora le hice algunos cambios para hacerlo más comprensible y agrego una explicación del mismo.
La idea es que en algún momento podemos recibir en Arduino una cadena (String) con valores separados con un caracter, una coma por ejemplo, y necesitamos obtener cada uno de los valores de la cadena.
La función String getValue(String data, char separator, int index)
, recibe el String data
, el cual es recorrido caracter por caracter hasta encontrar el separador indicado por el caracter separator
, y regresa la subcadena indicada por el número entero index
. Considerando la numeración como en los arreglos, la primera subcadena tiene el índice cero, la segunda 1, y así sucesivamente.
Si se trata de acceder un índice que sobrepasa el número de subcadenas que hay, la función getValue() regresa una cadena vacía. El usuario debe tomar en cuenta esto al usar esta función en sus propios proyectos.
// Programa en C++ para Arduino
// Por: Julio César Sandria Reynoso
// Obtiene las partes de una cadena separada por el caracter indicado
String split = "123,45,67890";
char separador = ',';
void setup() {
Serial.begin(9600);
Serial.print("Cadena a separar: ");
Serial.println(split);
String parte0 = getValue(split,separador,0);
Serial.print("parte0 = ");
Serial.println(parte0);
String parte1 = getValue(split,separador,1);
Serial.print("parte1 = ");
Serial.println(parte1);
String parte2 = getValue(split,separador,2);
Serial.print("parte2 = ");
Serial.println(parte2);
String parte3 = getValue(split,separador,3);
Serial.print("parte3 = ");
Serial.println(parte3);
}
void loop() {
}
String getValue(String data, char separator, int index) {
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = data.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex) {
found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found>index ?
data.substring(strIndex[0], strIndex[1]) : "";
}
La ejecución de este programa muestra en el monitor serial la siguiente salida:
Cadena a separar: 123,45,67890
parte0 = 123
parte1 = 45
parte2 = 67890
parte3 =
Si quieres aprender sobre robótica con Arduino, programación o algo más relacionado con computación o tecnologías de información, pide informes en el Instituto de Robótica de Xalapa (www.irox.mx).
Mtro. Julio C. Sandria R.
Excelente aporte, por fin un código que realmente funciona y que de verdad separa lo que uno necesita, sin restricciones, felicitaciones
Andrés, gracias por tus comentarios.