Data z řetězce

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Data z řetězce

Příspěvek od Ludek » 27 črc 2020, 12:30

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?

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Data z řetězce

Příspěvek od ondraN » 27 črc 2020, 13:10

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.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Data z řetězce

Příspěvek od Ludek » 27 črc 2020, 14:11

Ondro, tak jsem se nějak zamotal a už nevím, jak napsat testovací kod... Je to pro mne velké sousto

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Data z řetězce

Příspěvek od pavel1tu » 27 črc 2020, 14:26

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ý.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Data z řetězce

Příspěvek od ondraN » 27 črc 2020, 14:34

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.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Data z řetězce

Příspěvek od Ludek » 27 črc 2020, 14:37

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ě...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Data z řetězce

Příspěvek od KamilV » 27 črc 2020, 15:51

S oddělovačem je to nejjistější a snadno to "rozparsuješ" pomocí strtok().

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Data z řetězce

Příspěvek od Ludek » 27 črc 2020, 16:17

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);

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Data z řetězce

Příspěvek od kiRRow » 27 črc 2020, 17:04

Uvař pořádný kafe a počti si tohle : https://www.arduinotech.cz/inpage/ardui ... periferie/ hlavně tu část o sériové lince.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Data z řetězce

Příspěvek od KamilV » 27 črc 2020, 17:38

Kód: Vybrat vše

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

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

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 17 hostů