Stránka 1 z 2

Data z řetězce

Napsal: 27 črc 2020, 12:30
od Ludek
Ahoj, nevím, jestli se dají míchat brambory a hrušky, ale potřeboval bych toto :
Ze Serial.input přijde řetězec - např. < Ahoj123 > a já potřebuji toto oddělit tak,
že bude proměnná String = Ahoj a proměnná int = 123. Je to blbost, nebo to jde?

Re: Data z řetězce

Napsal: 27 črc 2020, 13:10
od ondraN
Jasně že to jde. Čti si znaky do stringu než narazíš na číslo (isDigit() ). Pak si čti čísla do jiného strinu, než tam bude jiný znak. String s čísly si převeď na int nebo jiný typ a pokračuj s dalším čtením. Konkrétní provedení záleží na struktuře dat a co se má s těmi nečíselnými hodnotami dělat.
Nebo další možnost, pokud víš, že je tam vždy text a číslo a tak dokola, načítej text a pomocí Serial.peek() se vždy podívej na znak, než ho přečteš. Pokud je to číslo, můžeš pak udělat Serial.parseInt() nebo Serial.parseFloat() podle očekávaného typu.

Re: Data z řetězce

Napsal: 27 črc 2020, 14:11
od Ludek
Ondro, tak jsem se nějak zamotal a už nevím, jak napsat testovací kod... Je to pro mne velké sousto

Re: Data z řetězce

Napsal: 27 črc 2020, 14:26
od pavel1tu
Pokud to už z nějakého Arduina odesíláš, a už tam je zvlášť to "Ahoj" a "123",
můžeš to odesílat pomocí STRUCT,
pak stejný STRUCT přijmeš už roztříděný.

Re: Data z řetězce

Napsal: 27 črc 2020, 14:34
od ondraN
No, možná zkus popsat, jestli máš možnost nějak vstupní data ovlivnit, nebo jakou očekáváš strukturu dat, nebo jestli je to vstup z klávesnice (to se ošetřuje nejhůře). Podle tvojeho dotazu se to nedá nějak rozumně spíchnout.

Re: Data z řetězce

Napsal: 27 črc 2020, 14:37
od Ludek
Ono mi to přijde po seriové lince, nebo po RS485 anebo po Rx, což je stejné, ale od PICAXE :-) :-) :-)
Mohu to odeslat na tři způsoby - buď jak jsem psal, anebo text - nejaký oddělovač - a čísla, nebo opačně...

Re: Data z řetězce

Napsal: 27 črc 2020, 15:51
od KamilV
S oddělovačem je to nejjistější a snadno to "rozparsuješ" pomocí strtok().

Re: Data z řetězce

Napsal: 27 črc 2020, 16:17
od Ludek
Kamile, to by asi bylo nejlepší řešení... ALe i tak jsem mimo :-( Hledám, zkouším a samá blbina...
Testuju to na řetězci, (třeba String s) "Ahoj*123" a text potřebuju mít v jiném řetězci (třeba String x) a čísla do proměnné int Data
Hvězdička je oddělovač.
Pak dám kontrolu :
Serial.print (s);
Serial.print (" ");
Serial.print (x);
Serial.print (" ");
Serial.println (Data);

Re: Data z řetězce

Napsal: 27 črc 2020, 17:04
od kiRRow
Uvař pořádný kafe a počti si tohle : https://www.arduinotech.cz/inpage/ardui ... periferie/ hlavně tu část o sériové lince.

Re: Data z řetězce

Napsal: 27 črc 2020, 17:38
od KamilV

Kód: Vybrat vše

char s[10] = "Ahoj*123";
char x[10];
int Data;

x = strtok(s, "*");
Data = atoi(strtok(NULL, "*"));