Aquí está el método Arduino para dividir una cadena como respuesta a la pregunta "¿Cómo dividir una cadena en una subcadena?" declarado como un duplicado de la presente pregunta.
El objetivo de la solución es analizar una serie de posiciones GPS registradas en un archivo de tarjeta SD . En lugar de recibir una Cadena Serial
, la Cadena se lee del archivo.
La función es StringSplit()
analizar una Cadena sLine = "1.12345,4.56789,hello"
a 3 Cadenas sParams[0]="1.12345"
, sParams[1]="4.56789"
y sParams[2]="hello"
.
String sInput
: las líneas de entrada a analizar,
char cDelim
: el carácter delimitador entre parámetros,
String sParams[]
: la matriz de salida de parámetros,
int iMaxParams
: el número máximo de parámetros,
- Salida
int
: el número de parámetros analizados,
La función se basa en String::indexOf()
y String::substring()
:
int StringSplit(String sInput, char cDelim, String sParams[], int iMaxParams)
{
int iParamCount = 0;
int iPosDelim, iPosStart = 0;
do {
// Searching the delimiter using indexOf()
iPosDelim = sInput.indexOf(cDelim,iPosStart);
if (iPosDelim > (iPosStart+1)) {
// Adding a new parameter using substring()
sParams[iParamCount] = sInput.substring(iPosStart,iPosDelim-1);
iParamCount++;
// Checking the number of parameters
if (iParamCount >= iMaxParams) {
return (iParamCount);
}
iPosStart = iPosDelim + 1;
}
} while (iPosDelim >= 0);
if (iParamCount < iMaxParams) {
// Adding the last parameter as the end of the line
sParams[iParamCount] = sInput.substring(iPosStart);
iParamCount++;
}
return (iParamCount);
}
Y el uso es realmente simple:
String sParams[3];
int iCount, i;
String sLine;
// reading the line from file
sLine = readLine();
// parse only if exists
if (sLine.length() > 0) {
// parse the line
iCount = StringSplit(sLine,',',sParams,3);
// print the extracted paramters
for(i=0;i<iCount;i++) {
Serial.print(sParams[i]);
}
Serial.println("");
}