Konverziós függvények (Apache OpenOffice futásidejű programkönyvtár)
- Konverziós függvények
- Karakterláncok
- Dátum és idő
- Fájlok és könyvtárak
- Üzenet- és beviteli ablakok
- Egyéb függvények
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.
Content on this page is licensed under the Public Documentation License (PDL). |