logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom] wstawic ten znak -> "

wader_669 18 Paź 2008 19:56 1910 8
  • #1 5644732
    wader_669
    Poziom 28  
    mam taki problem chcialem zrobic

    
    dim x as string*1
    
    select case x
    Case " " " : cos tam cos tam
    


    jednak tak sie nie da ale za to podobno mozna to zrobic tak:

    
    Case "{034}" : cos tam cos tam
    


    mimo to wyskakuje mi blad.
    Wie ktos moze jak to rozwiazac?

    (info dla tych ktorzy beda znowu zwracac uwage ze programuje w bascomie, obiecuje ze w tym semestrze sie naucze c :D )

    Dodano po 1 [minuty]:

    wersja kompilatora 1.11.9.0
  • #2 5645471
    Press
    Poziom 24  
    sprawdź jaki kod ASCII odpowiada znakowi cudzysłowu i zapisz to jako chr(X). Gdzie X to numer znaku ASCII na przykład 32 dla SPACJI.
  • #3 5645619
    wader_669
    Poziom 28  
    dobra czyli " to jest 34
    i wyskakuje mi error: 35 , 29, 126
  • #4 5645643
    Press
    Poziom 24  
    nie testowałem tego tylko pisze z głowy. Ale skoro X to STRING to nie można go porównywać z pojedynczym znakiem bo STRING to tablica znaków. Porównanie musiałoby wyglądać na przykład:

    if X[1] = chr(32) then coś_tam

    wtedy warunek będzie spełniony jeśli w STRINGu X na pozycji 1 będzie spacja.
  • #5 5645824
    zumek
    Poziom 39  
    Press napisał:
    nie testowałem tego tylko pisze z głowy. Ale skoro X to STRING to nie można go porównywać z pojedynczym znakiem bo STRING to tablica znaków. Porównanie musiałoby wyglądać na przykład:

    if X[1] = chr(32) then coś_tam

    wtedy warunek będzie spełniony jeśli w STRINGu X na pozycji 1 będzie spacja.

    Kiedy tak sobie czytam podobne dywagacje na temat Bascoma , to zaraz widzę taką sytuację:

    Bascom , to skomplikowana , sterowana numerycznie obrabiarka.
    "Statystyczny" użytkownik Bascoma , to 3-letni Jasio z przedszkola.
    "Reszta Świata" , która twierdzi że ta maszyna jest do kitu , bo Jaś nie potrafi na niej nic zrobić :D
    ...

    Ale wracajmy do tematu , a właściwie przykładu:
    
    $regfile = "attiny2313.dat"
    
    Dim X As String * 5
    
    X = ""
    Gosub Label
    X = "Ax"
    Gosub Label
    X = "Bxy"
    Gosub Label
    X = "Cxyz"
    Gosub Label
    X = "Ddcb"
    Gosub Label
    
    Stop
    
    Label:
    
    Select Case Asc(x)
       Case 0 : Print "...string jest pusty"
       Case Chr(65) : Print "Pierwszy znak w X to A"
       Case "B" : Print "Pierwszy znak w X to B"
       Case "{067}" : Print "Pierwszy znak w X to {067}"
       Case 68 : Print "Pierwszy znak w X to D"
    End Select
    
    Return
    

    Ja tylko zerknąłem do instrukcji obsługi , tej skomplikowanej ... "obrabiarki" .

    Piotrek
  • #6 5648832
    wader_669
    Poziom 28  
    widze ze w tym przypadku dziala.
    Staralem sie to przelozcy na moj kod i cos nie wychodzi.
    moze wkleje caly kod jest on z tej strony:
    http://maxparadys.w.interia.pl/LPH7779_cz2.htm
    i to jest ten odcinek kodu:
    
    '********************************* Tprintf  ************************START
    
    Sub Tprintf
    
    For Xx = 1 To Len(Tstring)
    
     Tchr = Mid(tstring , Xx , 1)
    
     Select Case Tchr
    
      Case " " : Tsub = 0
    
      Case "a" : Tsub = 1
    
      Case "b" : Tsub = 2
    
      Case "c" : Tsub = 3
    
      Case "d" : Tsub = 4
    
      Case "e" : Tsub = 5
    
      Case "f" : Tsub = 6
    
      Case "g" : Tsub = 7
    
    ...
    
      Case "^" : Tsub = 76
    
      Case "[" : Tsub = 77
    
      Case "]" : Tsub = 78
    
      Case "{" : Tsub = 79
    
      Case "}" : Tsub = 80
    
      Case Else : Goto Exit_case
    
     End Select
    
     Restore Ascii
    
     Set Porte.5
    
     Tsub = Tsub * 6
    
     If Tsub <> 0 Then
    
      For Tword = 1 To Tsub                                     'shift to character pointer
    
      Read Tout                                                            'Tsub times
    
      Next
    
     End If
    
      For Yy = 1 To 6                                                    'printing character loop
    
      Read Tout : Spiout Tout , 1                               '6x8 bits
    
      Next
    
    Exit_case:
    
    Next
    
    End Sub
    


    i do tego chcialem dodac ten znak "

    maly offtop:
    co do bascoma mi sie przyjemnie pisze w nim. Jednak ma pare wad, jedna znich jest to, ze nie jest idealna nakladkach na assamblera. Przez co kod wgrywany do procka zajmuje wiecej miejsca. Nastepny powod jest bardziej osobisty, na uczelni wszedzie jest uzywany c/c++ dlatego bym musial go dokladniej poznac.
  • #8 5649187
    wader_669
    Poziom 28  
    ok. Asc() zwraca kod ASCII podanego znaku.
    Dlatego nie rozumiem jak moze twoj wczesniejszy kod dziala.
    A szczegolnie chodzi o te 2 linijki, wedlug mnie nie powinno dzialac
    
       Case "B" : Print "Pierwszy znak w X to B"
       Case "{067}" : Print "Pierwszy znak w X to {067}" 
    

    Przez to ze dziala ci ten wczesniejszy program rozumiem, ze nie ma roznicy.
    Jak zle to rozumiem to moze ktos moze mi podac cos do czytania, bo czuje sie mega glupi w tym momencie.

    p.s. mimo moich watpliwosci testowalem program z asc(Tchr) tez nie dziala :(
  • #9 5695595
    wader_669
    Poziom 28  
    temat zamykam, poniewaz nie wiem dlaczego wczesniej nie dzialalo. Teraz wszystko gra, nie mam pojecia dlaczego :p
REKLAMA