Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Tłumaczenie: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek |
Obsługa łańcuchów i slicing
SPIS TREŚCI |
|
Slicing, używanie TO. Zauważ, że ta notacja nie należy do standardowego BASIC'a.
Mając dany łańcuch, jego podłańcuch składa się z pewnego ciągu kolejnych
znaków zawartych w nim. Stąd "tekst" jest podłańcuchem
Istnieje notacja zwana slicing (segmentowanie) do opisu podłańcuchów i można ją zastosować do dowolnych wyrażeń łańcuchowych. Ogólna postać wygląda następująco:
wyrażenie łańcuchowe (start TO koniec) |
zatem przykładowo:
"abcdef"(2 TO 5)="bcde" |
Jeśli pominiesz start, to zostanie w to miejsce przyjęta wartość 1; jeśli pominiesz koniec, to komputer zastosuje wartość równą długości łańcucha. Stąd:
"abcdef"( TO 5)="abcdef"(1 TO 5)="abcde" "abcdef"(2 TO )="abcdef"(2 TO 6)="bcdef" "abcdef"( TO )="abcdef"(1 TO 6)="abcdef" |
(Ostatni przykład możesz również wpisać jako "abcdef"(), jednak jaką ma to wartość?)
Nieco inna postać opuszcza TO i pozostawia jedynie samą liczbę.
"abcdef"(3)="abcdef"(3 TO 3)="c" |
Chociaż zwykle zarówno start jak i koniec muszą odwoływać się do istniejących fragmentów łańcucha, to reguła ta jest unieważniana przez inną: jeśli start jest większy od koniec, to wynikiem będzie pusty łańcuch. Zatem
"abcdef"(5 TO 7)
daje błąd 3 subscript wrong (3 zły indeks), ponieważ łańcuch zawiera jedynie 6 znaków a 7 to już zbyt wiele, lecz
"abcdef"(8 TO 7)=""
i
"abcdef"(1 TO 0)=""
Początek i koniec nie powinny być ujemne, inaczej otrzymasz błąd B integer out of range (B liczba całkowita poza zakresem).
Poniższy program w prosty sposób ilustruje niektóre z tych reguł.
10 LET a$="abcdef" 20 FOR n=1 TO 6 30 PRINT a$(n TO 6) 40 NEXT n 50 STOP |
Gdy uruchomisz ten program, wpisz NEW i wprowadź kolejny:
10 LET a$="TEREFEREKUKU" 20 FOR n=1 TO 12 30 PRINT a$(n TO ),a$((13-n) TO ) 40 NEXT n 50 STOP |
Przy zmiennych łańcuchowych możemy nie tylko wydobywać z nich podłańcuchy, lecz również przypisywać tym łańcuchom nowe zawartości.
Na przykład, wpisz:
LET a$="Jestem ten ZX Spectrum" |
a następnie:
LET a$(8 TO 11)="xxxxxx" |
i
PRINT a$
Zwróć uwagę, że ponieważ podłańcuch a$(5 TO 8) ma długość tylko 4 znaków, to jedynie pierwsze 4 litery x zostały użyte w przypisaniu. Jest to cecha charakterystyczna przypisywania do łańcuchów: podłańcuch musi posiadać taką samą długość po zakończeniu operacji, jaką miał na jej początku. Aby upewnić się, że tak właśnie się stanie, przypisywany łańcuch jest przycinany z prawej strony, jeśli jest zbyt długi, lub wypełniany spacjami, jeśli jest zbyt krótki — nazywa się to przypisaniem Prokrusta (ang. Procrustean assignment). Nazwa ta pochodzi od nazwiska syna Posejdona, Prokrusta, który przebrany w skórę wilka czyhał na podróżnych na drodze Megary do Aten. Każdego złapanego nieszczęśnika kładł na swoim łożu i mierzył — jeśli był za długi, to go przycinał, jeśli był za krótki, to go naciągał. Kres temu procederowi położył grecki heros Tezeusz.
Jeśli teraz spróbujesz:
LET a$()="Co tam"
i
PRINT a$;"."
to zobaczysz, że ta sama rzecz wystąpiła ponownie (tym razem ze wstawieniem spacji), ponieważ a$() liczy się jako podłańcuch.
LET a$="Co tam"
wykona zadanie poprawnie.
Skomplikowane wyrażenia łańcuchowe będą potrzebowały nawiasów wokół siebie, zanim zostaną poddane slicingowi. Na przykład:
"abc"+"def"(1 TO 2)="abcde" ("abc"+"def)(1 TO 2)="ab" |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.