Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 18 kwi 2024, o 09:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 18 wrz 2017, o 21:39 
Offline
Nowy

Dołączył(a): 14 sie 2016
Posty: 18
Pomógł: 0

Witam
Mam problem z "rozłożeniem" odebranego stringu na interesujące mnie dane.
Otrzymuję tekstowo to :

SERVER_@_^MAC^a020a6082e2e^NA^LIGHT_SERVER_1^PO^BRAK^GR^OSWIETLENIE^SSID^POLICJA^PASS^17B21F3924FGH994^IP^192.168.1.12^GA^192.168.1.1^SU^255.255.255.0^LO^9980^9A9A^>

i muszę wyłuskać interesujące mnie dane. Jako separator zmiennych używam znaku "^" . Niestety nie mogę zmienić tego separatora na inny gdyż używa go zbyt wiele modułów opartych o AVR8.

W moim programie mam kilkanaście Label-i w które muszę wstawić interesujące mnie dane np:

MAC.Text= "a020a6082e2e"
IP.Text="192.168.1.12" itd...

Na AVR realizowałem to w prosty sposób. Mogłem bez problemy wyliczyć występujące w stringu "^" dzięki:

Kod:
            //ZLICZANIE TOKENÓW:
                 token_ilosc=0;
                 pch=strchr(CFG_DANE,'^');
                 while (pch!=NULL)
                    {
                     pch=strchr(pch+1,'^');
                     token_ilosc++;

                    }


a potem

Kod:
    wsk = strtok (CFG_DANE , sep);

    //1.nagłówek raportu <^CLI_@
    wsk = strtok (NULL , sep);


ale w B4A to już nie tak łatwo.

Czytałem i próbowałem to zrealizować dzięki funkcji : s = Regex.Split("^", SERVER_DANE)

ale jakoś nie idzie to tak jak zakładam.

Kiedy chcę podejrzeć co otrzymuję po "wyłuskiwaniu" to w Label1 otrzymuję cały string jaki poddaję tokenowaniu...


Proszę o jakieś porady i naprowadzenie mnie na rozwiązanie.

Nie oczekuję gotowców ale każda rada jest cenna

------------------------ [ Dodano po: 9 minutach ]

hmmm z tego co zauważyłem to znak "^" jest znakiem specjalnym dla Regex.Split i należy używać Regex.Split("\^", SERVER_DANE) zamiast Regex.Split("^", SERVER_DANE)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2017, o 10:41 
Offline
Użytkownik

Dołączył(a): 23 kwi 2016
Posty: 58
Pomógł: 9

To może skorzystaj z czegoś takiego w Globals piszesz Private sf As StringFunctions
A zapis danych jest taki sam jak w Regex.Split tyle tylko że traktujesz te dane jako stringi.
Regex.Split jest chyba inny od StringFunctions, ale musiałbyś to sprawdzić.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2017, o 16:30 
Offline
Nowy

Dołączył(a): 05 sty 2016
Posty: 5
Pomógł: 1

A może tak z biblioteki MkWiFiUDP
Zastanawiam się czy da radę użyć IndexOf lub IndexOf2 lub LastIndexOf i LastIdexOf2.
Może pan Mirek coś naprowadzi.

------------------------ [ Dodano po: 27 minutach ]

B4A - MkWiFiUDP - FREE LIB

Szukaj w tytule jak wyżej. Jest tam ładnie wyjaśnione o parsowaniu danych i rozbijanie pojedyncze stringi


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 wrz 2017, o 19:09 
Offline
Użytkownik

Dołączył(a): 19 lip 2013
Posty: 759
Pomógł: 37

dokładnie to samo chciałem zaproponować



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO