Burada, "Bir dize alt dize nasıl bölünür?" Sorusunun cevabı olarak bir dize bölmek için Arduino yöntemi verilmiştir. Mevcut sorunun bir kopyası olarak ilan edildi.
Çözümün amacı, bir SD kart dosyasına kaydedilen bir dizi GPS konumunu ayrıştırmaktır . Bir String almak yerine , String dosyadan okunur.Serial
İşlev StringSplit()
bir Dize sLine = "1.12345,4.56789,hello"
3 Dizge olarak ayrıştırır sParams[0]="1.12345"
, sParams[1]="4.56789"
& sParams[2]="hello"
.
String sInput
: ayrıştırılacak girdi satırları,
char cDelim
: parametreler arasındaki sınırlayıcı karakter,
String sParams[]
: parametrelerin çıktı dizisi,
int iMaxParams
: maksimum parametre sayısı,
- Çıktı
int
: ayrıştırılan parametrelerin sayısı,
İşlev şunlara dayanır String::indexOf()
ve 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);
}
Ve kullanımı gerçekten basittir:
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("");
}