Konverziós függvények (Apache OpenOffice futásidejű programkönyvtár)

From Apache OpenOffice Wiki
Jump to: navigation, search
Book.png

Sokszor előfordul olyan helyzet, hogy az egyik típusú változót át kell alakítani egy másik típusúvá.

Implicit és explicit típuskonverzió

Az egyik változó másik típusúvá alakításának legegyszerűbb módja, a hozzárendelés.

Dim A As String
Dim B As Integer
 
B = 101 
A = B

Ebben a példában az A változó karakterlánc, és a B változó egész szám. Az Apache OpenOffice Basic garantálja, hogy a B karakterlánccá legyen konvertálva, mielőtt az A változóhoz való hozzárendelése megtörténik. Ez az átalakítás sokkal bonyolultabb, mint amilyennek látszik: a B egész szám megmarad a memóriában egy kétbájtos számként. Viszont az A egy karakterlánc, így a számítógép minden karakterét (minden számát) egy vagy két bájton tárolja. Ezért, mielőtt a B változót az A változóba lehetne másolni, a B változót konvertálni kell az A változó belső formátumára.

A legtöbb programozási nyelvtől eltérően a Basic a típuskonverziót automatikusan elvégzi. Viszont ennek végzetes következményei lehetnek. Ha jobban megvizsgáljuk a következő kódot,

Dim A As String
Dim B As Integer
Dim C As Integer
 
B = 1 
C = 1
A = B + C

amely az első pillantásra egyértelműnek tűnik, végül egy csapdának bizonyul. A Basic-értelmező először kiszámítja az összeadás eredményét, majd ezt konvertálja karakterlánccá, ami így a 2 karakterláncot adja eredményül.

Viszont, ha a Basic-értelmező először konvertálja a B és a C változót karakterlánccá, és utána hajtja végre a pluszjel-operátort, akkor az eredmény a 11 karakterlánc lesz.

Ugyanez vonatkozik a variant típusú változókra is:

Dim A  
Dim B  
Dim C  
 
B = 1 
C = "1"
A = B + C

Mivel a variant típusú változók számokat és karakterláncokat is tartalmazhatnak, nem lehet tudni, hogy az A változóhoz a 2-es számot vagy a 11 karakterláncot kell hozzárendelni.

Az implicit típuskonverziók miatt bekövetkező hibák csak a gondos programozással küszöbölhetők ki, például, ha nem használunk varint típust.

Az implicit típuskonverziók miatt bekövetkező egyéb hibák elkerülésére az Apache OpenOffice Basic számos típuskonverziós függvényt kínál, amelyekkel megadhatjuk, mikor kell konvertálni egy művelet adattípusait:

CStr(változó)
bármilyen adattípust karakterlánccá konvertál.
CInt(változó)
bármilyen adattípust egész számmá konvertál.
CLng(változó)
bármilyen adattípust hosszú egész számmá konvertál.
CSng(változó)
bármilyen adattípust rövid egész számmá konvertál.
CDbl(változó)
bármilyen adattípust dupla pontosságú számmá konvertál.
CBool(változó)
bármilyen adattípust logikai értékké konvertál.
CDate(változó)
bármilyen adattípust dátummá konvertál.

Ezekkel a konvertáló függvényekkel megadhatjuk, hogyan hajtsa végre azApache OpenOffice Basic a típuskonverziós műveleteket:

Dim A As String
Dim B As Integer
Dim C As Integer
 
B = 1 
C = 1
A = CStr(B + C)      ' Először B és C összeadása, majd
                        ' összevonása (a "2" karakterláncot eredményezi)
A = CStr(B) + CStr(C)   ' B és C konvertálása karakterlánccá, majd
                        ' összevonása (a "11" karakterláncot eredményezi)

A példában, az első összeadásnál az Apache OpenOffice Basic először összeadja a két egész számot, majd karakterlánccá konvertálja az eredményt. A program az A változóhoz hozzárendeli a 2 karakterláncot. A második változatnál a program először konvertálja az egész számokat karakterláncokká, majd ezeket összevonja az értékadásnál. Így az A változóhoz hozzárendeli a 11 karakterláncot.

A CSng és a CDbl numerikus konvertáló függvények tizedes törteket is elfogadnak paraméterként. Tizedesjelként az adott területi beállítás szerinti jelet kell használni. És ennek megfelelően a CStr metódusok is az aktuális területi beállítást használják számok, dátumok és idők formázásánál.

A Val függvény különbözik a Csng, Cdbl és Cstr metódustól. Karakterláncot konvertál számmá, de tizedesjelként mindig pontot vár.

Dim A As String
Dim B As Double
 
A = "2.22"
B = Val(A)      ' Helyesen konvertálódik a területi
                ' beállításoktól függetlenül

Változók tartalmának vizsgálata

Előfordulhat, hogy a dátumot nem lehet konvertálni:

Dim A As String
Dim B As Date
 
A = "teszt"
B = A            ' Hibaüzenet jelenik meg.

A példában a teszt karakterlánc dátumváltozóhoz rendelésének nincs értelme, ezért a Basic értelmező hibaüzenetet jelenít meg. Ugyanez történik, ha megpróbálunk karakterláncot rendelni egy logikai változóhoz:

Dim A As String
Dim B As Boolean
 
A = "teszt"
B = A            ' Hibaüzenet jelenik meg.

A Basic értelmező ismét hibaüzenetet jelenít meg.

Ezek a hibaüzenetek elkerülhetők, ha a program ellenőrzi értékadás előtt a változókat, hogy a hozzárendelendő változó típusa megegyezik-e a célváltozó típusával. Az Apache OpenOffice Basic ebből a célból a következő tesztelő függvényeket biztosítja:

IsNumeric(érték)
ellenőrzi, hogy az érték szám-e.
IsDate(érték)
ellenőrzi, hogy az érték dátum-e.
IsArray(érték)
ellenőrzi, hogy az érték tömb-e.

Ezek a függvények különösen akkor hasznosak, ha a felhasználó által beírt értékeket ellenőrizzük. Például ellenőrizhetjük, hogy a felhasználó érvényes számot vagy dátumot írt-e be.

If IsNumeric(BeolvasottErtek) Then
  ErvenyesErtek = BeolvasottErtek
Else 
  ErvenyesErtek = 0
  MsgBox "Hibaüzenet"
End If

Az előző példában, ha a BeolvasottErtek változó érvényes numerikus adatot tartalmaz, akkor a program hozzárendeli az értékét az ErvenyesErtek változóhoz. Ha a BeolvasottErtek nem tartalmaz érvényes számot, akkor az ErvenyesErtek értéke 0 lesz, és a program hibaüzenetet ír ki.

Míg a számok, dátumok és tömbök ellenőrzéséhez rendelkezésünkre áll beépített függvény az Apache OpenOffice Basicben, addig a logikai értékekhez nincs ilyen. Viszont ezt megtehetjük az alábbi IsBoolean függvénnyel:

Function IsBoolean(Value As Variant) As Boolean
  On Error Goto Hibakezelo:
  Dim Proba As Boolean
  Proba = Value
  IsBoolean = True
  On Error Goto 0
  Exit Sub
 
  Hibakezelo:
  IsBoolean = False
  On Error Goto 0
End Function

Az IsBoolean függvény definiál egy belső Proba nevű logikai segédváltozót, és megpróbálja hozzárendelni a kapott értéket. Ha ez sikeres volt, akkor a függvény True (igaz) értéket ad vissza. Ha nem volt sikeres, akkor futásidejű hiba lép fel, amelyet kezel a program, és a függvény False értékkel tér vissza.

Documentation note.png Ha egy karakterlánc az Apache OpenOffice Basic programban nem numerikus értéket tartalmaz, és azt egy számhoz rendeljük, az Apache OpenOffice Basic nem jelenít meg hibaüzenetet, hanem a konvertálást az első érvénytelen karakternél befejezi. Ez a VBA-ban másképp van. Ott hiba történik, és a program futása megszakad, ha ilyen hozzárendelést végzünk.


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools