Nie je to tak zložité, stačí určiť terminátor - znak podľa ktorého sa bude robiť parsing, String previesť na pole znakov (buffer) na ktoré ide použiť funkcia strtok(). Tým je parser v podstate hotový. Potom už len treba pretypovať získanú hodnotu na INT, ktorú vieš vypísať a zároveň sa uloží aj do poĺa na daný index 0 až 19, teda celkovo získaš 20 prvkov.
Vzoro má program pripravené prázdne 20 prvkové pole integerov, kde ich zapisuješ pri parsingu jeden po druhom.
Funkcia strtok() prechádza pole znakov zľava doprava. Urobil som to čo najjednoduchšie na pochopenie. Dal som terminátor ; aj za posledné číslo v pôvodnej reprezentácii, šlo by to s jednou úpravou v programe použiť aj bez neho, ale takto to zbehne v cykle, program je kratší.
Môžeš si daný program vyskúšať priamo v simulátore Wokwi:
https://wokwi.com/projects/343359507599983186.
Taktiež simulátor podporuje aj modul SD karty a knižnicu SD, teda aj celý projekt si môžeš zostaviť tam bez nutnosti zapisovať do tvojej fyzickej SD karty, kým si program odladíš, aby si si ju zbytočne mnoho krát neprepísal.
Kód: Vybrat vše
//20 cisel v SD karte nacitanych ako String oddelenych terminatorom ;
String values = "111;222;333;444;555;666;777;888;999;100;200;300;400;500;600;700;800;900;110;210;";
const char terminator[] = ";"; //oddelovaci znak (terminator) pre rozdelenie Stringu
int numbers[20] = {}; //prazdne pole cisel s velkostou 30 prvkov pre 30 cisel parsovanych zo Stringu
char* num; //smernik, vrati hodnotu na adrese v pamäti
String num_string; //String ktory textovu hodnotu cisla prevedie na INT
void setup() {
Serial.begin(9600);
unsigned char str[values.length() + 1];
values.toCharArray(str, values.length());
num = strtok(str, terminator);
num_string = String(num);
numbers[0] = num_string.toInt();
Serial.print("1. prvok v poli numbers: ");
Serial.println(numbers[0]); //vypis prveho prvku pola numbers (nultý index)
for(int i=1; i<20; i++){
num = strtok(NULL, terminator);
num_string = String(num);
numbers[i] = num_string.toInt();
Serial.print(i+1);
Serial.print(". prvok v poli numbers: ");
Serial.println(numbers[i]); //vypis i-teho prvku pola numbers, ktore sa inkrementuje 1 až 19
}
}
void loop() {
}
Očakávaný výstup na UART:
K jednotlivým hodnotám kdekoľvek v programe pristúpiš cez numbers[0] až numbers[19] pre prvé až 20-te číslo.
