Strona 1 z 1

Kiślowy kalendarz

: 09 lip 2015 23:22
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.

Re: Kiślowy kalendarz

: 09 lip 2015 23:45
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 6080 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 ;)

Kiślowy kalendarz

: 10 lip 2015 15:44
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

Re: Kiślowy kalendarz

: 10 lip 2015 21:46
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.