Krótkie pytanie o skonstruowanie wyrażenia "Regular expression". Próbuję z depeszy czujnika wyciągnąć interesujące mnie informacje. Depesza wygląda tak:
$VNINS,000498.176257,0000,0080,+025.423,-000.152,-000.055,+00.00000000,+000.00000000,+00000.000,+000.000,+000.000,+000.000,99.99,00.01,0.001*5C\r\n
Chciałbym wykorzystać blok "Match regular expression" i wyciąć wszystko pomiędzy znacznikiem początku "$VNINS," a znakami końca linii "\r\n". Czy ktoś może pomóc? Przeglądałem różne struktury wyrażeń regularnych, ale nie znalazłem odpowiedzi na mój problem.
Pozdrawiam
Regular expression - wycinanie fragmentu stringa
Re: Regular expression - wycinanie fragmentu stringa
Cześć,
jakoś nie ma żadnych podpowiedzi. Zrobiłem wycinanie ramki danych inna metodą. Wrzucam - może komuś się przyda, a może ktoś pokaże mi jak to zrobić lepiej (zwłaszcza zależy mi na szybkości działania - ma to być wykorzystane w aplikacji RT) - zawsze warto się uczyć
jakoś nie ma żadnych podpowiedzi. Zrobiłem wycinanie ramki danych inna metodą. Wrzucam - może komuś się przyda, a może ktoś pokaże mi jak to zrobić lepiej (zwłaszcza zależy mi na szybkości działania - ma to być wykorzystane w aplikacji RT) - zawsze warto się uczyć
- Załączniki
-
- vectornav_parse_v02.vi
- (19.2 KiB) Pobrany 136 razy
- Pitol
- Moderator
- Posty: 984
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Regular expression - wycinanie fragmentu stringa
Hej,
Fajnie, że się sam za to wziąłeś
Może nie wyszło najlepiej ale ważne, że działa!
Do zabawy z wyrażeniami regularnymi polecam jakiś edytor/parser online, np. https://regex101.com.
Ja z niego korzystam często i gęsto. W LabVIEW testowanie czegoś jest utrudnione, lepiej to zrobić online.
Potem tylko wklejasz wyrażenie do LV i gotowe.
W Twoim przypadku można zrobić to zadanie łatwiej.
Zdecydowanie łatwiej
Zakładam, że nazwa ramki to "VNINS" a CRC to "5C".
Wyrażenie regularne składa się z kilku elementów:
Fajnie, że się sam za to wziąłeś
Może nie wyszło najlepiej ale ważne, że działa!
Do zabawy z wyrażeniami regularnymi polecam jakiś edytor/parser online, np. https://regex101.com.
Ja z niego korzystam często i gęsto. W LabVIEW testowanie czegoś jest utrudnione, lepiej to zrobić online.
Potem tylko wklejasz wyrażenie do LV i gotowe.
W Twoim przypadku można zrobić to zadanie łatwiej.
Zdecydowanie łatwiej
Zakładam, że nazwa ramki to "VNINS" a CRC to "5C".
Wyrażenie regularne składa się z kilku elementów:
- \$ - znacznik startu wiadomości
- (\w+) - pierwsza grupa - zgarnij wszystkie litery - nazwa ramki
- (.*) - druga grupa - zgarnij wszystko (liczby, litery, przecinki, itp.) - zakładam, że nie będzie tu tekstu aż to CRC
- \* - znacznik CRC
- (\w+) - trzecia grupa - zgarnij wszystkie litery - CRC
Re: Regular expression - wycinanie fragmentu stringa
Właśnie czegoś takiego szukałem - wielkie dzięki. Jedno tylko dodatkowe pytanie - jak w regular expression wyszukać znak końca linii? Chodzi mi o to, że po jednej pełnej depeszy często trafia się początek kolejnej, który trzeba odesłać do połączenia z kolejnym stringiem (stąd u mnie te dodatkowe case'y). Zatem lepiej byłoby wyszukiwać wszystko o $ do \n
Pozdrawiam
Przemek
Pozdrawiam
Przemek
- Pitol
- Moderator
- Posty: 984
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Regular expression - wycinanie fragmentu stringa
Ta ostatnia grupa (\w+) łapie tylko litery.
Jeśli zaraz po CRC przyjdzie \r\n i coś jeszcze, to nie będzie to w żaden sposób przetworzone.
Aby to wyłapać, skorzystaj z wyjścia "After Match", które zwróci wszystko, co zostało ze stringa wejściowego.
Potem możesz to dokleić do kolejnej porcji danych i takiego stringa znów wrzucić na RegExp.
Jeśli zaraz po CRC przyjdzie \r\n i coś jeszcze, to nie będzie to w żaden sposób przetworzone.
Aby to wyłapać, skorzystaj z wyjścia "After Match", które zwróci wszystko, co zostało ze stringa wejściowego.
Potem możesz to dokleić do kolejnej porcji danych i takiego stringa znów wrzucić na RegExp.