Szöveges változók


Előző részben már használtunk szövegek eltárolására karakteres tömböket, most megvizsgálunk
egy némileg hatékonyabb módszert, a szöveges változókat. Az eltárolandó szöveget String-ekben
rakjuk és nevükre hivatkozva nyerjük vissza őket.

pl.: String szoveg = ”Aduino”; //szoveg nevű string létrehozása

Serial.print(szoveg); // ugyan ennek a kiíratása a soros monitorra

A stringeknél lehetőség van többféle szövegkezelő utasítás használatára, változók szöveggé
konvertálására, illetve szöveg számmá vagy karakter tömbbé alakítására is.
Nézzünk egy egyszerű progit:

void setup(){
Serial.begin(9600);
}
void loop(){
String text1 = "szovegkezeles"; //text1 nevű stringnek értéket adunk
Serial.println(text1); //kiíratjuk a soros monitorra
delay(1000);

text1 = String('A'); //a text1 stringbe konvertálunk egy karaktert (char típus → string)
Serial.println(text1);
delay(1000);

text1 = String(12345); //a text1 stringbe konvertálunk egy egész számot (int, long → string)
Serial.println(text1);
delay(1000);

text1 = String(23454, HEX); // text1 stringbe konvertálunk egy egész számot hexadecimális alakban
Serial.println(text1);
delay(1000);
}

Néhány megjegyzés: - ha a sztring típusú változóba szöveget tárolunk akkor azt mindig idézőjelek
közé téve tehetjük meg.

Sztringek összefűzése

A sztringek összefűzését általában egy '+' jelel megoldhatjuk, erre mutat példát a következő progi:

String text1 = "elso szoveg ";
String text2 = "masodik szoveg "; //szöveges változók deklarálása
String text3 = String();

void setup(){
Serial.begin(9600);
}

void loop(){
// két szöveges változó összefűzése
text3 = text1 + text2;
Serial.println(text3);
delay(1000);

//egy szöveges változó és egy konkrét szöveg összefűzése
text3 = text1 + "ami kiirhato";
Serial.println(text3);
delay(1000);

//szöveges változó és egy szám összefűzése
text3 = text2 + 125765;
Serial.println(text3);
delay(1000);

//szöveges változó és egy számlált (vagy mért) érték összefűzése
text3 = text2 + millis()
Serial.println(text3);
delay(1000);
}


Az előbb beszéltünk a konvertálás szabályairól, most mégis első ránézésre mindenféle konvertáló utasítás nélkül végbe megy az átalakítás. Persze ez nem így van, ha jobban megnézzük a
következő sort akkor megérthetjük a mechanizmusát: String text3 = String();
Mint látható a text3 string értéke egy üres konvertáló utasítás, ez azt jelenti bármit beletölthetünk
a text3 változóba az konvertáltan, szövegként tárolódik el.


Sztringhez hozzáfűzés

Megtehetjük azt is, hogy a két összefűzött string valamelyikébe tároljuk el a kapott értéket (hozzáfűzés az adott változóhoz). Kétféle képpen kivitelezhető, az egyik a += operátor használata,

a másik a concat() utasítás segítségével valósítható meg.

Nézzünk egy példát:

String text1, text2;
void setup(){
Serial.begin(9600);
}

void loop(){
text1 = String("Minden ");
text2 = String(" ertek ");
text1 += text2;
Serial.println(text1);
delay(1000);
text1.concat(" nagyon jo");
Serial.println(text1);
delay(1000);
text2 += analogRead(0);
Serial.println(text2);
delay(1000);
}


Szöveg hossz

A length() utasítás segítségével kaphatjuk meg az adott szövegünk hosszát (a szövegben levő
karakterek számát adja vissza).

String text1;
void setup(){
Serial.begin(9600);
}
void loop(){

text1 = "Arduino szovegmeret ";
Serial.println(text1 + text1.length()+" karakter hosszu");
delay(2000);

// a szöveg végi üres kockák levágása
text1.trim();
Serial.println(text1 + text1.length()+" karakter hosszu");
delay(2000);
}

A trim() utasítás levágja a szöveg végéről az üres kockákat(szóközöket);


Karakter keresés egy szövegben

A keresett karakter helyének meghatározását két a String objektumoz fűzhető utasítás is segíti,
ez az indexOf() és a lastIndexOf(). Az első a szöveg elejétől keresi az adott karaktert és pozíciójának
értékével tér vissza, a második utasítás a szöveg végétől kezdi a keresést. A probléma mind két utasításnál az, hogy az első talált karakternél befejezi a keresést. Ha nekünk a második vagy harmadik ilyen karakter pozíciója kell akkor ezeket nem érhetjük el, illetve dehogyis nem erre az eshetőségre építettek be az utasításba még egy paramétert amivel a keresés kezdő pozícióját adhatjuk meg. Pl,: text1.indexOf( 'a' , 6 );


String text1 = " alabamai avatar";
int elso_kar,utolso_kar = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
//az első a betű helyének meghatározása
elso_kar = text1.indexOf('a');
Serial.print(" az elso 'a' betu: ");
Serial.print(elso_kar);
Serial.println(". helyen van");
delay(1000);

//az utolsó a betű helyének meghatározása
utolso_kar = text1.lastIndexOf('a');
Serial.print(" az utolso 'a' betu: ");
Serial.print(utolso_kar);
Serial.println(". helyen van");
delay(1000);

//a második a betű helye
elso_kar = text1.indexOf('a',elso_kar+1);
Serial.print("a kovetkezo 'a' betu a: ");
Serial.print(elso_kar);
Serial.println(". helyen van");
delay(1000);
}


Nagy- és kisbetű váltó utasítások

A toUpperCase() utasítás a szövegben található minden kisbetűt naggyá alakít, a toLowerCase() az
ellentettje minden nagy betűt kicsivé alakít.


void setup() {
Serial.begin(9600);
}

void loop() {
String text1 = " Nagy Ho Ho Ho Horgasz";
Serial.println(text1);
text1.toUpperCase();
Serial.println(text1);

text1.toLowerCase();
Serial.println(text1);
while(true);
}


Folyt. Köv.