kategoria: Hollywood
[#1] [Hollywood] CompareStr
Próbuję porównać dwa stringi za pomocą podanej funkcji i podać czy odpowiedź jest poprawna, czy nie, ale za każdym razem dostaję, że tak. Gdzie błąd?

P.S. Tak, wiem, żem noob. Oto kod (to Wait na końcu jest po to, żebym zobaczył wynik, który mignie):

odp1a$ = PrawidłowaOdp
Print ("Pytanie?")
odp1$ = InKeyStr (#ALPHABETICAL)
If (CompareStr (odp$1, odp1a$)) = 0 
    Print ("Tak")
Else
    Print ("Nie")
EndIf
Wait(200)
[#2] Re: [Hollywood] CompareStr

@recedent, post #1

Zmienna ma nazwę odp1$ a porównujesz odp$1


Ostatnia aktualizacja: 14.01.2018 12:15:32 przez Norbert
[#3] Re: [Hollywood] CompareStr

@Norbert, post #2

:jestem głupkiem:

Dziękuję.

EDIT: Ale teraz cokolwiek nie wpiszę (nawet prawidłową odpowiedź) to zawsze leci EndIf. A CompareStr jeśli stringi są takie same powinien zwracać 0.

Ostatnia aktualizacja: 14.01.2018 12:32:41 przez recedent
[#4] Re: [Hollywood] CompareStr

@recedent, post #3

u mnie dziala (lekko zmienilem zawartosc by bylo DLA MNIE czytelniejsze)

odp1a$ = "test"
Print ("wpisz cos: ")

odp1$ = InKeyStr(#ALPHABETICAL)
Print("\n")
If (CompareStr (odp1$, odp1a$)) = 0 
	NPrint ("tarfiles")
Else
	NPrint ("pudlo")
EndIf

Wait(100)
[#5] Re: [Hollywood] CompareStr

@recedent, post #3

A string nie powinien być taki :
odp1a$ ="PrawidłowaOdp"
zamiast
odp1a$ = PrawidłowaOdp
[#6] Re: [Hollywood] CompareStr

@Norbert, post #5

Dokładnie tak. Prawidłowa odpowiedź musi być w cudzysłowiu. Dzięki wszystkim za sugestię, idę kodować.
[#7] Re: [Hollywood] CompareStr

@recedent, post #6

O kant d... rozbić ten cały CompareStr. Wystarczy że pierwsza litera jest taka sama jak w prawidłowej odpowiedzi i zwraca 0, czyli (w moim przypadku) - odpowiedź "prawidłowa".

Inna rzecz, że warto w nawiasiku po drugim porównywanym stringu dodać FALSE, bo inaczej aktywuje się casesen i zrobi się wrażliwy na wielkie i małe litery. Ale nie zmienia to faktu, że odpowiedź może być jednoliterowa i "prawidłowa". Grr...

EDIT: Dałem sobie DebugPrint dla jednoliterowej odpowiedzi i oczom mym ukazało się okienko dialogowe z wartością -1. Ktoś wie może dlaczego dla mojego skryptu -1 = 0?

Ostatnia aktualizacja: 15.01.2018 23:13:34 przez recedent
[#8] Re: [Hollywood] CompareStr

@recedent, post #7

To użyj instrukcji Left$ albo Mid$. Nie ma szans na "podobne" albo "trochę podobne" - albo będzie 100% match, albo 100% falsche.

Edit: -1 = true, 0 = false

Ostatnia aktualizacja: 15.01.2018 23:15:26 przez Umpal
[#9] Re: [Hollywood] CompareStr

@recedent, post #7

ja bym sprawdzil tak

odpA$ ="dupa"
Print ("wpisz ...")
odpB$ = InKeyStr (#ALPHABETICAL)
odp=CompareStr (odpA$, odpB$, TRUE,, )
If odp=0
Print ("Tak to dupa")
Else
Print ("Nie to zupa")
EndIf
Wait(200)
[#10] Re: [Hollywood] CompareStr

@selur, post #9

@Selur

Kłopot jest innej natury. Na Twoim przykładzie (po wywaleniu dwóch przecinków za TRUE) działa na tej samej zasadzie co u mnie, tzn. zamiast "dupa" wystarczy wpisać "d" i CompareStr uważa, że wszystko OK - zwraca wartość 0 i napisze Ci, że "Tak, to dupa".

@Umpal

Ale w jaki sposób użyć tego MidStr() żeby porównać dwa stringi? On zwraca jako wynik sam string. Sugerujesz, żeby zrobić tak? (na Selurowym przykładzie):

CompareStr (MidStr(odpA$, 0), MidStr(odpB$, 0), FALSE)


Jeśli tak to tak nie zadziała - tzn. zadziała, ale wynik ten sam.

Póki co - jestem zmuszony po prostu "na chama" porównać stringi metodą:

If odp1a$ = odp1$ ...


w ten sposób działa, ale jest mniej elegancko, bo ta metoda jest wrażliwa na wielkość liter, czego chciałem uniknąć.

Ostatnia aktualizacja: 16.01.2018 08:40:10 przez recedent
[#11] Re: [Hollywood] CompareStr

@recedent, post #10

W Hollywood stringi kodowane w ASCII można porównywać tak jak liczby.
Może spróbuj
if odp1$ = odp1a$

A czy te nawiasy wokół CompareStr mogą sprawiać problem?

If (CompareStr (odp1$, odp1a$)) = 0



Ostatnia aktualizacja: 16.01.2018 08:55:18 przez Hexmage960
[#12] Re: [Hollywood] CompareStr

@Hexmage960, post #11

W poście 10 napisałem już, że ta metoda działa. Tyle tylko, że jest wrażliwa na wielkość liter.
Nawiasy wokół CompareStr nie mają znaczenia. Działa i tak i tak.
[#13] Re: [Hollywood] CompareStr

@recedent, post #7

masz blad przy instrukcji IF
podaj jak DOKLADNIE WYGLADA ta linia u Ciebie

Zobacz:
If CompareStr("nie","dupa")   Then DebugPrint("jest OK")
If CompareStr("duuyyyy","dupa")	   Then DebugPrint("jest OK")


musisz uwazac IF-em - on daje 0 TYLKO (!!!) gdy warunek daje 0, pozostale opcje sa jako TRUE wiec nie wazne czy to bedzie -100 czy 999

zabraklo Ci znaku rownosci:
If CompareStr("d","dupa")=0	   Then DebugPrint("tego nie zobaczysz")


w 1szym przykladzie wyniki sa odpowiednio: -1 i 1
czyli warunek JEST spelniony bo nie przyrwnujesz do 0 tylko patrzysz czy operacja zakonczyla sie SUKCESEM (a dokladnie nie FALSE-em czyli NIE 0)





DODANO
innymi slowy:
taki zapis:
CompareStr("d","dupa")

daje 3 opcje: -1,0,1 (w tym wypadku -1)

a taki
if CompareStr("d","dupa")

juz tylko 2 mozliwosci: 0,1 (tutaj da Ci (1))

i warunek zostaje spelniony
dlatego musizsz dopisac "=0" (lub cokolwiek innego ale tak by "logiga"szeroki uśmiech byla zachowana)




Ostatnia aktualizacja: 16.01.2018 09:30:38 przez peceha
[#14] Re: [Hollywood] CompareStr

@peceha, post #13

Hehe, tyle ze Ty masz przyrownane do 0

Przyklad ktory ja podalem na poczatku oraz ten co podal Selur u mnie dzialaja jak nalezy czyli podanie litery "d" nie jest tym samym co wpisanie "dupa"

Zreszta Twoj program z postu 1szego tez dziala jak powinien (bez znaczenia czy casesen=FALSE czy TRUE) - oczywiscie po dodaniu "".


Ostatnia aktualizacja: 16.01.2018 09:49:06 przez peceha
[#15] Re: [Hollywood] CompareStr

@peceha, post #14

ten zapis
If CompareStr (odp1$, odp1a$) = 0 ... powinien dzialac ale wyglada na to, ze ta funkcja CompareStr() jest wadliwa, bo zle zwraca wartosc 0 jesli lancuchy sa rozne.


ja bym postrzelal dalej i sprobowal
CompareStr (odp1$, odp1a$,FALSE,#ENCODING_RAW)
albo
CompareStr (odp1$, odp1a$,FALSE,#ENCODING_AMIGA)
pomysł
[#16] Re: [Hollywood] CompareStr

@selur, post #15

DebugPrint(CompareStr ("dupa","Dupa",False))
DebugPrint(CompareStr ("dupa","dupa"))
DebugPrint(CompareStr ("d","dupa"))
DebugPrint(CompareStr ("dupa","d"))

daje:
0
0
-1
1

czyli tak jak byc powinno (0 gdy oba stringi sa identyczne).

No chyba ze recedent uzywa Hollywood nizszego niz 7 to wtedy faktycznie musialby pokombinowac z kodowaniem bo tam nie ma UTF (o ile wogole dalby rade przyrownac polskie litery)


Ostatnia aktualizacja: 16.01.2018 10:08:44 przez peceha
[#17] Re: [Hollywood] CompareStr

@peceha, post #16

No i OK,
tzn. ze recedent ma trefnego Hollywooda albo nadgryzionego aplemaka z robalem i dlatego u niego nie dziala
[#18] Re: [Hollywood] CompareStr

@peceha, post #16

Fajnie. A spróbuj sobie dać:

Print (CompareStr("d","dupa",FALSE))
Wait(200)


I wychodzi 0. Czemu?
[#19] Re: [Hollywood] CompareStr

@recedent, post #18

U nie wychodzi -1. Powaznie.


Ostatnia aktualizacja: 16.01.2018 10:22:03 przez peceha
[#20] Re: [Hollywood] CompareStr

@peceha, post #19

nie na DebugPrint(), tylko na zwykłym Print()?
[#21] Re: [Hollywood] CompareStr

@recedent, post #20

ok, racja


Ostatnia aktualizacja: 16.01.2018 10:22:09 przez peceha
[#22] Re: [Hollywood] CompareStr

@peceha, post #21

Ale jaja...

[#23] Re: [Hollywood] CompareStr

@recedent, post #22

O w morde, hehe.
Napisz na ich forum, albo jak chcesz ja napisze jesli nie jestes zarejestrowany.
[#24] Re: [Hollywood] CompareStr

@recedent, post #22

reasumujac
uzytecznosc programu 0/10 ale za to wyglad graficzny 9,5/10
[#25] Re: [Hollywood] CompareStr

@selur, post #24

@Selur: Lepiej byś sprawdził czy na Twoim konfigu działa tak samo. Mogę Ci przygotować wykonywalkę, jeśli nie masz Hollywood.

@peceha: Spróbuję sam coś napisać, właśnie puściłem rejestrację.
[#26] Re: [Hollywood] CompareStr

@recedent, post #25

A jak byś przepisał to na nowo. W nowym projekcie? Tylko nie na zasadzie "kopiuj-wklej".

Ostatnia aktualizacja: 16.01.2018 10:50:38 przez SuperBuster
[#27] Re: [Hollywood] CompareStr

@recedent, post #25

Moge tylko sprawdzic czy to pod klasykiem ruszy, bo u mnie takich cudów Hollywoodów brak.
[#28] Re: [Hollywood] CompareStr

@SuperBuster, post #26

@SuperBuster:

To nie moja wina. Zrobiłem wykonywalkę (u mnie na MorphOSie zwraca wynik 0), przerzuciłem na PC i tam daje wynik -1. Zresztą - sprawdźcie sami. Pliki wykonywalne pod różne systemy operacyjne można pobrać tutaj. Bardzo jestem ciekaw jakie wyniki dadzą poszczególne systemy operacyjne.

P.S. Pod OSX trzeba jeszcze flagi ustawić, że wykonywalny.
[#29] Re: [Hollywood] CompareStr

@recedent, post #28

skad mozna sciagnac cybergraphics.library na klasyka ? (Aminet nie dziala )
[#30] Re: [Hollywood] CompareStr

@selur, post #29

Zobacz czy tu nie będzie w którymś pakiecie.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem