zapis / cteni promenne ze souboru
zapis / cteni promenne ze souboru
Ahoj, mohli by jste mi prosim poradit - nemuzu se nejak domluvit s tim jak ulozit do souboru promenne a pak je zase precist.
Soubor vytvorim, zapisu do nej ale nejsem pak schopny to precist tak abych ten obsah souboru priradil spravnym promenným.
Mam např 3 proměnné - naplnim je a potřebuji je uložit do souboru a pak je přečíst a hodnoty priradit spravne promenné.
Asi je to pro mistni mistry uplne jednoduche ale nevim co furt delam blbe ze mi to nefunguje
Diky
Soubor vytvorim, zapisu do nej ale nejsem pak schopny to precist tak abych ten obsah souboru priradil spravnym promenným.
Mam např 3 proměnné - naplnim je a potřebuji je uložit do souboru a pak je přečíst a hodnoty priradit spravne promenné.
Asi je to pro mistni mistry uplne jednoduche ale nevim co furt delam blbe ze mi to nefunguje
Diky
Re: zapis / cteni promenne ze souboru
Data do souboru se ukládají pod nějakou "struktůrou". Jde to třeba tak, že data od sebe oddělíš určitým znakem, nebo počtem byte. Při ukládání rozložené data složíš do nějaké struktůry a při načítání musíš umět tu struktůru zase rozložit. To děláš třeba tak, že načítáš data dokud nedostaneš ukončovací znak, pak víš, že máš celou jednu proměnou a další data načítáš pak do druhé.
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: zapis / cteni promenne ze souboru
Aký je to súbor (.csv, .txt)?
Ako vyzerajú dáta, sú nejako formátované?
Čítaš to z nejakého webservera na ktorý sa pripájaš? Alebo je to z SD karty? Aký mikrokontróler používaš?
Štandardne sa robí nejaký oddelovač (terminátor) podľa ktorého sa dáta rozparsujú cez C funkciu strtok(), kde sa ten terminátor použije, napríklad: Prípadne sú dáta na riadkoch pod sebou a čítaš riadok po riadku, počítaš riadky a vieš na ktorej pozícii si a ktorej premennej máš priradiť hodnotu.
Môžeš si to uložiť aj ako JSON súbor a každej hodnote priradíš kľúč podľa ktorého si konkrétnu hodnotu vyparsuješ.
Funkcia nato v knižnici ArduinoJSON bude na riadok... JSON súbor je super štruktúra, nakoľko si to môžeš ľahko rozširovať. Bežne sú takto uložené napr. konfiguračné a riadiace dáta pre mikrokontróler. Možností ako to urobiť je fakt veľa, záleží najmä na tom, ako tie dáta v súbore vyzerajú, aké sú ich dátové typy.
Príklad JSON dát, ktoré sú vyparsované a následne odoslané po MQTT na Broker do subtopicov pod main topic hladinomer/:
Ako vyzerajú dáta, sú nejako formátované?
Čítaš to z nejakého webservera na ktorý sa pripájaš? Alebo je to z SD karty? Aký mikrokontróler používaš?
Štandardne sa robí nejaký oddelovač (terminátor) podľa ktorého sa dáta rozparsujú cez C funkciu strtok(), kde sa ten terminátor použije, napríklad:
Kód: Vybrat vše
Termínator ";" (bodkočiarka), výstup načítaného súboru: 123;456;789
Parser vráti:
variable 1 = 123
variable 2 = 456
variable 3 = 789
Môžeš si to uložiť aj ako JSON súbor a každej hodnote priradíš kľúč podľa ktorého si konkrétnu hodnotu vyparsuješ.
Funkcia nato v knižnici ArduinoJSON bude na riadok... JSON súbor je super štruktúra, nakoľko si to môžeš ľahko rozširovať. Bežne sú takto uložené napr. konfiguračné a riadiace dáta pre mikrokontróler. Možností ako to urobiť je fakt veľa, záleží najmä na tom, ako tie dáta v súbore vyzerajú, aké sú ich dátové typy.
Príklad JSON dát, ktoré sú vyparsované a následne odoslané po MQTT na Broker do subtopicov pod main topic hladinomer/:
Re: zapis / cteni promenne ze souboru
je to txt soubor ulozeny ve spiffs. S tim vytvorenim a otevrenim pro cteni neni problem vypisu si obsah do seriove linky ale nevim prave jak to rozsekat tak abych mel treba
namerim nejakou hodnotu a, b, c, a potrebuji je nejak "strukturovane" ulozit do toho souboru tak abych to mohl pouzit v pripade potreby (resetu) jako vychozi hodnotu pro ty promenne a,b,c ktere se naplnim v setupu
Neumim si poradit s tim strukturovanim zapisu a rozdelenim pri cteni. nepotrebuji nic vic než tři INT promenné
Kód: Vybrat vše
int a = 1;
int b = 1;
int c = 1;
Neumim si poradit s tim strukturovanim zapisu a rozdelenim pri cteni. nepotrebuji nic vic než tři INT promenné
Re: zapis / cteni promenne ze souboru
Musíš v tom souboru použít i nějaký oddělovací znak. Třeba zalomení řádku. Když pak při čtení souboru narazíš na konec řádku, tak víš, že jsi načetl první proměnnou a další data patří do jiné proměnné.
Nebo se můžeš kouknout na tohle https://playground.arduino.cc/Code/Struct/ a tohle https://hackingmajenkoblog.wordpress.co ... n-arduino/ . Když do souboru uložíš struktůru dat, tak po načtení těchto dat zpátky do struktůry, se sami rozškatulkují.
Já bych doporučil spíše tu druhou cestu.
Nebo se můžeš kouknout na tohle https://playground.arduino.cc/Code/Struct/ a tohle https://hackingmajenkoblog.wordpress.co ... n-arduino/ . Když do souboru uložíš struktůru dat, tak po načtení těchto dat zpátky do struktůry, se sami rozškatulkují.
Já bych doporučil spíše tu druhou cestu.
Re: zapis / cteni promenne ze souboru
Tak ty inty normálně ulož na extra řádky pomoci println() a pak ze souboru přečti vždycky řádek do stringu a zpracuj funkcí toInt()
https://www.arduino.cc/reference/en/lan ... ons/toint/
https://www.arduino.cc/reference/en/lan ... ons/toint/
Re: zapis / cteni promenne ze souboru
Ono i ukládat každou proměnnou do svého vlastního souboru by bylo řešení. Tak trošku kostrbatější, ale určitě funkční.
Re: zapis / cteni promenne ze souboru
A ten soubor se bude někam přenášet nebo ručně editovat, že se to musí lámat přes TXT?
Pokud ne, tak bych uložil binárně 3x int a pak zase 3x int přečetl. Jak to v tom souboru bude fyzicky vypadat mne v takovém případě zajímat nemusí.
P.S. v případě tak malého objemu dat by to šlo i jen do EEPROM. Takže mě to navádí zpět k tomu, že se možná ten soubor bude někde jinde používat, je to tak?
Pokud ne, tak bych uložil binárně 3x int a pak zase 3x int přečetl. Jak to v tom souboru bude fyzicky vypadat mne v takovém případě zajímat nemusí.
P.S. v případě tak malého objemu dat by to šlo i jen do EEPROM. Takže mě to navádí zpět k tomu, že se možná ten soubor bude někde jinde používat, je to tak?
Re: zapis / cteni promenne ze souboru
Ne ne ja to chtel pres TXT protoze nic jineho neumim
Opravdu se jedna jen o to ze prubezne se mi meni 3x hodnota INT a tu potrebuji ulozit - ne moc casto ta zmena je treba 1x za den až 1x za týden ale potřebuji aby pri resetu ESPecka se obnovily hodnoty z posledniho "zaznamu".
Pokud by se to dalo udelat jednoduseji tak bych byl urcite rad za kazdou radu. Navic se tim zase neco priucim
Opravdu se jedna jen o to ze prubezne se mi meni 3x hodnota INT a tu potrebuji ulozit - ne moc casto ta zmena je treba 1x za den až 1x za týden ale potřebuji aby pri resetu ESPecka se obnovily hodnoty z posledniho "zaznamu".
Pokud by se to dalo udelat jednoduseji tak bych byl urcite rad za kazdou radu. Navic se tim zase neco priucim
Re: zapis / cteni promenne ze souboru
Pokud :
Nechceš se nic přiučit, a řešit co nejrychleji, ulož každou hodnotu do svého vlastního souboru co bude obsahovat pouze jeden int.
Pokud se může stát, že jednou těch hodnot bude 5 a po druhé 15. Použij metodu čtení souboru po řádcích, nebo jak jsem psal zastaralejší metodu čtení dokud nenarazím na znak co znamená konec řádku.
Pokud víš že počet hodnot a jejich typ nikdy nebude změněn a chceš mrknout na novou fintu, koukni na to s těma struktůrama. Je to fakt elegantní. Prostě si řekneš, že máš struktůru mojeUlozeneData .... a ta obsahuje 3x int ... a jmenujou se a b c ... prosím uložit na kartu. A stejně naopak to i čteš ... mám mojeUlozeneData, ktere obsahují 3x int ... a chci aby se jmenovaly a b c ... prosím načíst to sem z karty.
Nechceš se nic přiučit, a řešit co nejrychleji, ulož každou hodnotu do svého vlastního souboru co bude obsahovat pouze jeden int.
Pokud se může stát, že jednou těch hodnot bude 5 a po druhé 15. Použij metodu čtení souboru po řádcích, nebo jak jsem psal zastaralejší metodu čtení dokud nenarazím na znak co znamená konec řádku.
Pokud víš že počet hodnot a jejich typ nikdy nebude změněn a chceš mrknout na novou fintu, koukni na to s těma struktůrama. Je to fakt elegantní. Prostě si řekneš, že máš struktůru mojeUlozeneData .... a ta obsahuje 3x int ... a jmenujou se a b c ... prosím uložit na kartu. A stejně naopak to i čteš ... mám mojeUlozeneData, ktere obsahují 3x int ... a chci aby se jmenovaly a b c ... prosím načíst to sem z karty.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 35 hostů