Funkcia Asc
Funkcia Asc zoberie prvý znak v reťazci a prevedie ho do číselnej ASCII podoby.
Syntax funkcie Asc: Asc(text ako reťazec)
Takže argumentom funkcie Asc by mal byť reťazec. Pozríme sa na prípad, keď argumenty pekne zmixujeme tak, ako v minulých dieloch.
1. príklad: Testujeme argumenty pre funkciu Asc
Sub macro REM začiatok makra On Error Resume Next REM ak nastane chyba, tak vykonávanie makra pokračuje REM deklarácie premenných Dim i As Integer Dim retazec As String Dim pole() REM naplnenie nášho deklarovaného poľa pole() = Array("agadg", "oslik", 0, 100,254, -10, -255, 10.6, 254.6, "11", "45", "88", "-25", "84p", "o78", "87.2", "254,99", "p125,77", "127,45osel", &HA2, &HB7, &HC8) REM experimentujeme s funkciou Asc v cykle For For i = LBound(pole()) To UBound(pole()) retazec = retazec & i+1 & " Asc(" & pole(i) & ") = " retazec = retazec & Asc(pole(i)) retazec = retazec & Chr(10) Next REM Vypíšeme na obrazovku MsgBox retazec End Sub REM koniec procedúry
Výsledok makra
Rozbor makra:
Tak a teraz sa pozrieme, čo nám to dáva funkcia Asc pri rôznych typov argumentov.
1 Asc(agadg) = 97 – znak a má v ASCII tabuľke hodnotu 97
3 Asc(0) = 48 – 0 má v ASCII tabuľke hodnotu 48
6 Asc(-10) = 45 – pamätajte, berie vždy prvý znak, takže áno, znak - má hodnotu 45
18 Asc(p125,77) = 112 – znak p má hodnotu 112 v už viac krát spomínanej tabuľke
V druhom príklade si ukážeme praktickú ukážku využitia funkcie Asc.
2. príklad: Praktická ukážka využitia funkcie Asc
Sub macro REM začiatok makra On Error Resume Next REM ak nastane chyba, tak vykonávanie makra pokračuje REM deklarácie premenných Dim i As Integer Dim velkost As Integer Dim retazec1 As String Dim retazec2 As String Dim pole() REM naplnenie nášho deklarovaného poľa pole() = Array("Surviving Mars", "World of Warcraft", "Stellaris", "Euro Truck Simulator 2", "Cities Skylines", "American Truck Simulator", "Counter Strike 1.6", "Crusader Kings 2", "Europa Univrsalis IV", "The Sims 4") REM priradíme prvky pola do reťazca For i = LBound(pole()) To UBound(pole()) If i = UBound(pole()) Then retazec1 = retazec1 & pole(i) Exit For End If retazec1 = retazec1 & pole(i) & ", " Next REM nájdeme všetky hry začínajúce na písmeno C For i = LBound(pole()) To UBound(pole()) If Asc(pole(i)) = Asc("C") Then retazec2 = retazec2 & pole(i) & ", " End If Next MsgBox "Všetky hry: " & retazec1 & Chr(10) & "Hry začínajúce na písmeno C: " & Left(retazec2, Len(retazec2)-2) REM vypíšeme reťazce End Sub REM koniec procedúry
Výsledok makra
Rozbor makra:
Mám tu viacero častí kódu, ktoré vám chcem bližšie vysvetliť. Pozrime sa na prvú diskutabilnú časť makra.
1.ukážka:
For i = LBound(pole()) To UBound(pole()) If i = UBound(pole()) Then retazec1 = retazec1 & pole(i) Exit For End If retazec1 = retazec1 & pole(i) & ", " Next
Takže v našej prvej ukážke máme cyklus, v ktorom prechádzame to naše známe pole. Keďže naším prvým cieľom je transformovať obsah poľa do reťazca, robíme to takto: retazec1 = retazec1 & pole(i) & ", ". Keďže jednotlivé prvky poľa obsahujú naše definované reťazce, konkrétne známe hry, tak pre estetický výpis oddeľujeme reťazce čiarkou a medzerou. Problém je, že bez zásahu by to dopadlo tak, že i na konci by ostala čiarka a medzera (ale tu by sme nevideli, čiže ani oči by neplakali), čo by mohlo byť pre niekoho rušivým elementom. Takto dostávame zaujímavý problém, ktorý môžeme riešiť. Vyriešili sme to tak, že ak bude sa bude vykonávať posledná iterácia cyklu, tak jednoducho skončíme cyklus a čiarka sa nepridá!
Ukážme si druhu ukážku:
2. ukážka:
For i = LBound(pole()) To UBound(pole()) If Asc(pole(i)) = Asc("C") Then retazec2 = retazec2 & pole(i) & ", " End If Next
V druhej ukážke už nasadzujeme funkciu Asc, ktorá sa nám v tomto príklade náramne hodí. Totižto my potrebujeme vypísať len hry, ktoré začínajú so začiatočným písmenom C. Dáme to do podmienky a pekne krásne vyselektujeme jednotlivé hry na tie, ktoré začínajú na písmeno C a ktoré nie.
Ostáva nám už len vysvetliť, ako si poradíme s nezbednou čiarkou a medzerou na konci tak ako v prvej ukážke. Na pomoc si zavolám funkciu Left, ktorá zobrazí z reťazca len toľko, koľko uznáme za vhodné v našej implementácii. Využijeme aj funkciu Len, ktorá nám vráti počet znakov v reťazci. Ak sa chceme zbaviť medzery a čiarky, tak musíme odpočítať o hodnotu 2! Výsledná podoba riešenia problému je nasledovná: Left(retazec2, Len(retazec2)-2).