Đây là phương pháp Arduino để phân tách một chuỗi dưới dạng trả lời cho câu hỏi "Làm thế nào để phân tách một chuỗi trong chuỗi con?" tuyên bố như một bản sao của câu hỏi hiện tại
Mục tiêu của giải pháp là phân tích một loạt các vị trí GPS được ghi vào tệp thẻ SD . Thay vì nhận được một Chuỗi từ Serial
, Chuỗi được đọc từ tệp.
Hàm này StringSplit()
phân tích một Chuỗi sLine = "1.12345,4.56789,hello"
thành 3 Chuỗi sParams[0]="1.12345"
, sParams[1]="4.56789"
& sParams[2]="hello"
.
String sInput
: các dòng đầu vào được phân tích cú pháp,
char cDelim
: ký tự phân cách giữa các tham số,
String sParams[]
: mảng đầu ra của tham số,
int iMaxParams
: số lượng tham số tối đa,
- Đầu ra
int
: số lượng tham số được phân tích cú pháp,
Chức năng này dựa trên String::indexOf()
và 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);
}
Và cách sử dụng rất đơn giản:
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("");
}