Kiślowy kalendarz

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Kislup
Posty: 2
Rejestracja: 30 cze 2015 16:03
Wersja środowiska: LabVIEW 2011

Kiślowy kalendarz

Post autor: Kislup »

Witam. Jestem świeżakiem jeśli chodzi o LV i w ramach nabierania praktyki postanowiłem zrobić sobie przypominajkę-kalendarz, ale już na samym początku się wykładam...
Zakładam, że dane w pliku będą zapisywane w następujący sposób:

Kod: Zaznacz cały

DD1-MM1-RRRR1 Jakieś wydarzenie1
DDn-MMn-RRRRn Jakieś wydarzenien
Zauważyłem, że jaki bym nie dał format wejściowego ciągu znaków to bloczek Scan From File mi się wysypuje - Error 85. Próbowałem do pliku wpisywać i odczytywać tylko liczby, oddzielone "-" lub tylko spacją - zawsze to samo.
Jakąś poprawę przynosi zamiana w/w bloczku na Scan From String. Dane numeryczne sczytuje mi poprawnie, ale tę część stringu po spacji przerzuca mi do następnego wiersza. Moje próby z zamknięciem znaków między " " kończyło się ponownie Błędem 85.
Z chęcią bym coś doczytał o formacie pliku wejściowego, bo przykłady z helpa nie bardzo mi rozjaśniają obraz :/ Chyba, że ktoś w prosty sposób będzie potrafił mi to wytłumaczyć - będę bardzo wdzięczny.
Załączniki
Kalendarz.vi
(23.88 KiB) Pobrany 303 razy
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Kiślowy kalendarz

Post autor: PiDi »

Przy odczycie plików musisz sobie wyobrazić, że poruszasz się po tym pliku kursorem. W momencie, gdy otwierasz plik, stawiasz kursor na jego początku. Odczytanie wszystkich linii polega na przesuwaniu się kursorem po całym pliku, aż dojdziesz do końca - zwracane są wszystkie przeczytane bajty, z dodatkowym podziałem na elementy tablicy w miejscach, gdzie były znaki końca linii. Pytanie: gdzie znajduje się teraz kursor? Oczywiście na końcu pliku. Dalej próbujesz zeskanować określony string z pliku. Kursor jest już na końcu pliku, więc nic tam nie ma - próbujesz parsować nieistniejące stringi.

Co z tym zrobić? W Twoim przypadku wystarczy zamienić Scan From File na Scan From String, do którego podajesz kolejne stringi, które już odczytałeś z pliku:
scan.png
scan.png (9.15 KiB) Przejrzano 5614 razy
Aha, w stringu formatującym zastąp sobie "%[A-Za-z]" zwykłym "%s" - to pierwsze zwróci Ci tylko jeden wyraz, który nie ma w sobie żadnych cyfr.

Jest też alternatywne rozwiązanie, czyli użycie Scan From File, tylko trzeba wtedy coś z tym nieszczęsnym kursorem zrobić... Co pozostawię już jako ćwiczenie ;)
ObrazekObrazekObrazekObrazek
Kislup
Posty: 2
Rejestracja: 30 cze 2015 16:03
Wersja środowiska: LabVIEW 2011

Kiślowy kalendarz

Post autor: Kislup »

Dzięki za pomoc. Postaram się przysiąść do tego kursora niebawem.
Sprawdziłem proponowane przez Ciebie rozwiązanie. %s również sczytywał mi tylko pierwszy wyraz, ale za to coś takiego: %[^] działa jak powinno. Chyba załapałem jakie są różnice między %s, %[a-z] i %[^a-z], ale fajnie by było porównać moje domysły z faktami :D
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Kiślowy kalendarz

Post autor: PiDi »

Ok, rozpędziłem się z tym "%s", to zwraca oczywiście tylko string do pierwszego białego znaku. Zajrzyj do pomocy dotyczącej bloczka Scan From String, tam jest wszystko opisane na temat tych formatów.

Możesz też w ogóle pominąć skanowanie tego stringa na końcu i skorzystać z wyjścia remaining string.
ObrazekObrazekObrazekObrazek
ODPOWIEDZ