包含在尋找其他文件熱門支援資源 | 以 PDF 格式下載這本書 (1551 KB)
Kapitel 3 Die Laufzeitbibliothek von StarOffice BasicDie folgenden Abschnitte stellen die zentralen Funktionen der Laufzeitbibliothek vor. KonvertierungsfunktionenIn vielen Situationen kommt es vor, dass eine Variable eines Typs in eine Variable eines anderen Typs umgewandelt werden muss. Implizite und explizite TypumwandlungenDie einfachste Möglichkeit, den Typ einer Variablen zu ändern, besteht in einer Zuweisung. Dim A As String Dim B As Integer B = 101 A = B In diesem Beispiel ist Variable A vom Typ String (Zeichenfolge) und Variable B vom Typ Integer. StarOffice Basic stellt sicher, dass die Variable B bei der Zuweisung zu A zum Typ String konvertiert wird. Diese Konvertierung ist weit aufwendiger, als es auf den ersten Blick scheint: Die Integer-Variable B verbleibt im Arbeitsspeicher in Form einer zwei Byte langen Zahl. A ist dagegen vom Typ String und der Computer speichert für jedes Zeichen (jede Ziffer) der Zeichenfolge einen ein oder zwei Byte langen Wert. Aus diesem Grund muss also vor dem Kopieren des Inhalts von B nach A B in das interne Format von A konvertiert werden. Basic führt die Typumwandlung im Gegensatz zu den meisten anderen Programmiersprachen automatisch durch. Dies kann jedoch mitunter folgenschwere Konsequenzen haben. Die zunächst eindeutig scheinende Code-Sequenz Dim A As String Dim B As Integer Dim C As Integer B = 1 C = 1 A = B + C entpuppt sich bei genauerem Hinsehen als Falle. Der Basic-Interpreter berechnet zuerst das Ergebnis der Addition und wandelt es dann in eine Zeichenfolge um, was als Ergebnis die Zeichenfolge 2 ergibt. Wandelt der Basic-Interpreter hingegen zunächst die Ausgangswerte B und C in eine Zeichenfolge um und wendet auf diese den Plus-Operator an, so ergibt sich als Ergebnis die Zeichenfolge 11. Dasselbe gilt bei der Verwendung von Variant-Variablen: Dim A Dim B Dim C B = 1 C = "1" A = B + C Da Variant-Variablen sowohl Zahlen als auch Zeichenfolgen enthalten können, bleibt unklar, ob der Variable A die Zahl 2 oder die Zeichenfolge 11 zugewiesen wird. Die genannten Fehlerquellen durch implizite Typumwandlung lassen sich nur durch disziplinierte Programmierung vermeiden, indem beispielsweise auf die Verwendung des Datentyps Variant verzichtet wird. Um weitere Zweifelsfälle durch implizite Typumwandlung zu vermeiden, bietet StarOffice Basic eine Reihe von Konvertierungsfunktionen an, mit denen Sie definieren können, wann der Datentyp einer Operation umgewandelt werden sollte:
Mit diesen Konvertierungsfunktionen können Sie definieren, wie StarOffice Basic diese Typumwandlungen durchführen soll: Dim A As String
Dim B As Integer
Dim C As Integer
B = 1
C = 1
A = CStr(B + C) ' B und C werden zuerst addiert und dann
' konvertiert (ergibt die Zahl 2)
A = CStr(B) + CStr(C) ' B und C werden in eine Zeichenfolge konvertiert
' und dann verkettet (ergibt String "11")
Bei der ersten Addition des Beispiels addiert StarOffice Basic zunächst die Integer-Variablen und wandelt anschließend das Ergebnis in eine Zeichenfolge um. A wird somit die Zeichenfolge 2 zugewiesen. Im zweiten Fall hingegen werden die Integer-Variablen zuerst in zwei Zeichenfolgen konvertiert und dann über die Zuweisung miteinander verkettet. A wird somit die Zeichenfolge 11 zugewiesen. Die numerischen Konvertierungsfunktionen CSng und CDbl akzeptieren auch Dezimalzahlen. Als Dezimaltrennzeichen muss dafür das in den entsprechenden Ländereinstellungen definierte Zeichen verwendet werden. Umgekehrt verwenden die Methoden CStr beim Formatieren von Zahlen, Datums- und Zeitangaben die aktuell ausgewählten Ländereinstellungen. Die Funktion Val unterscheidet sich von den Methoden Csng, Cdbl und Cstr. Sie wandelt eine Zeichenfolge in eine Zahl um, erwartet darin jedoch immer einen Punkt als Dezimaltrennzeichen. Dim A As String
Dim B As Double
A = "2.22"
B = Val(A) ' Wird unabhängig von den Ländereinstellungen
' korrekt umgewandelt
Prüfen des Inhalts von VariablenIn einigen Fällen ist eine Umwandlung der Daten nicht möglich: Dim A As String Dim B As Date A = "test" B = A ' Erzeugt Fehlermeldung Das Zuweisen der Zeichenfolge test zu einer Date-Variable ergibt in dem gezeigten Beispiel keinen Sinn, so dass der Basic-Interpreter einen Fehler meldet. Dasselbe gilt für den Versuch, eine Zeichenfolge einer Boolean-Variable zuzuweisen: Dim A As String Dim B As Boolean A = "test" B = A ' Erzeugt Fehlermeldung Auch hier meldet der Basic-Interpreter einen Fehler. Vermeiden lassen sich solche Fehlermeldungen, indem das Programm vor einer Zuweisung prüft, ob der Inhalt der zuzuweisenden Variablen zum Typ der Zielvariablen passt. Hierfür stellt StarOffice Basic folgende Prüffunktionen zur Verfügung: Diese Funktionen sind insbesondere bei der Abfrage von Benutzereingaben sehr nützlich. So lässt sich damit beispielsweise prüfen, ob ein Anwender tatsächlich eine gültige Zahl beziehungsweise ein gültiges Datum eingegeben hat. If IsNumeric(UserInput) Then ValidInput = UserInput Else ValidInput = 0 MsgBox "Fehlermeldung." End If Enthält die Variable UserInput im Beispiel einen gültigen numerischen Wert, wird dieser der Variable ValidInput zugewiesen. Enthält UserInput keine gültige Zahl, wird ValidInput der Wert 0 zugewiesen und eine Fehlermeldung zurückgegeben. Während zur Überprüfung von Zahlen, Datumsangaben und Arrays in StarOffice Basic die oben genannten Prüffunktionen existieren, ist eine entsprechende Funktion für Boolean-Werte nicht vorhanden. Die Funktionalität kann jedoch zumindest mit Hilfe der Funktion IsBoolean nachgebildet werden: Function IsBoolean(Value As Variant) As Boolean On Error Goto ErrorIsBoolean: Dim Dummy As Boolean Dummy = Value IsBoolean = True On Error Goto 0 Exit Sub ErrorIsBoolean: IsBoolean = False On Error Goto 0 End Function Die Funktion IsBoolean definiert eine interne Hilfsvariable Dummy vom Typ Boolean und versucht, dieser den übergebenen Wert zuzuweisen. Ist die Zuweisung erfolgreich, gibt die Funktion den Wert True zurück. Schlägt sie fehl, wird ein Laufzeitfehler erzeugt, den die Prüffunktion abfängt, um einen Fehler zurückzugeben. Hinweis – Enthält eine Zeichenfolge in StarOffice Basic einen nicht numerischen Wert und wird dieser einer Zahl zugewiesen, so erzeugt StarOffice Basic keine Fehlermeldung, sondern übergibt den Wert 0 an die Variable. Dieses Verhalten unterscheidet sich von VBA. Dort wird bei einer entsprechenden Zuweisung ein Fehler ausgelöst und die Programmausführung abgebrochen. ZeichenfolgenArbeiten mit ZeichensätzenStarOffice Basic verwendet bei der Verwaltung von Zeichenfolgen (Strings) den Unicode-Zeichensatz. Die Funktionen Asc und Chr erlauben es dabei, den zu einem Zeichen gehörenden Unicode-Wert zu ermitteln beziehungsweise für einen Unicode-Wert das entsprechende Zeichen herauszufinden. Die folgenden Ausdrücke weisen der Code-Variable die verschiedenen Unicode-Werte zu: Code = Asc("A") ' Lateinischer Buchstabe A (Unicode-Wert 65)
Code = Asc("—") ' Euro-Zeichen (Unicode-Wert 8364)
Code = Asc("??") ' Kyrillischer Buchstabe ?? (Unicode-Wert 1083)
Umgekehrt stellt der Ausdruck MyString = Chr(13) sicher, dass die Zeichenfolge MyString mit dem Wert der Zahl 13 (steht für einen Zeilenumbruch) initialisiert wird. Der Befehl Chr wird in Basic-Sprachen häufig dazu verwendet, Steuerzeichen in eine Zeichenfolge einzufügen. So stellt die Zuweisung MyString = Chr(9) + "Dies ist ein Test." + Chr(13) sicher, dass dem Text ein Tabulatorzeichen (Unicode-Wert 9) vorangestellt und ein Zeilenumbruchszeichen (Unicode-Wert 13) angehängt wird. Zugriff auf Teile einer ZeichenfolgeStarOffice Basic bietet vier Funktionen, die Teilzeichenfolgen zurückgeben:
Hier einige Beispielaufrufe für die genannten Funktionen: Dim MyString As String Dim MyResult As String Dim MyLen As Integer MyString = "Dies ist ein kleiner Test" MyResult = Left(MyString,5) ' Gibt die Zeichenfolge "Dies " zurück MyResult = Right(MyString, 5) ' Gibt die Zeichenfolge " Test" zurück MyResult = Mid(MyString, 8, 5) ' Gibt die Zeichenfolge "t ein" zurück MyLen = Len(MyString) ' Gibt den Wert 25 zurück Suchen und ErsetzenFür das Suchen einer Teilzeichenfolge innerhalb einer anderen Zeichenfolge bietet StarOffice Basic die Funktion InStr: ResultString = InStr (SearchString, MyString) Der Parameter SearchString gibt die in MyString zu suchende Zeichenfolge an. Als Rückgabewert liefert die Funktion eine Zahl, die die Position beinhaltet, an der SearchString das erste Mal innerhalb von MyString vorkommt. Möchte man weitere Treffer der Zeichenfolge finden, bietet die Funktion die Möglichkeit, eine optionale Startposition anzugeben, ab der StarOffice Basic mit der Suche beginnen soll. Die Syntax der Funktion lautet in diesem Fall: ResultString = InStr(StartPosition, MyString, SearchString) In den zuvor genannten Beispielen ignoriert InStr die Groß- und Kleinschreibung. Um die Suche so abzuwandeln, dass InStr Groß- und Kleinschreibung unterscheidet, fügen Sie den Parameter 0 wie im folgenden Beispiel gezeigt hinzu: ResultString = InStr(MyString, SearchString, 0) Mit den vorstehenden Funktionen zur Bearbeitung von Zeichenfolgen können Programmierer Teile einer Zeichenfolge in einer anderen Zeichenfolge suchen und ersetzen: Function Replace(Source As String, Search As String, NewPart As String)
Dim Result As String
Dim StartPos As Long
Dim CurrentPos As Long
Result = ""
StartPos = 1
CurrentPos = 1
If Search = "" Then
Result = Source
Else
Do While CurrentPos <> 0
CurrentPos = InStr(StartPos, Search, Source)
If CurrentPos <> 0 Then
Result = Result + Mid(Source, StartPos, _
CurrentPos - StartPos)
Result = Result + NewPart
StartPos = CurrentPos + Len(Search)
Else
Result = Result + Mid(Source, StartPos, Len(Source))
End If ' Position <> 0
Loop
End If
Replace = Result
End Function
Die Funktion sucht die übergebene Zeichenfolge Search in einer Schleife mittels InStr in dem Ausgangsausdruck Source. Findet sie den gewünschten Suchausdruck, nimmt sie den vor dem Ausdruck stehenden Teil und schreibt ihn in den Rückgabepuffer Result. Diesem fügt sie an der Stelle des Suchausdrucks Search den neuen Teil Part hinzu. Finden sich keine Treffer mehr für den Suchausdruck, ermittelt die Funktion den übrig gebliebenen Teil der Zeichenfolge und fügt diesen ebenfalls an den Rückgabepuffer an. Die so erzeugte Zeichenfolge wird als Ergebnis des Ersetzungsvorgangs zurückgegeben. Da das Ersetzen von Teilzeichenfolgen mit zu den am häufigsten benötigten Funktionen gehört, wurde der Mid-Funktionsumfang in StarOffice Basic so erweitert, dass diese Aufgabe automatisch ausgeführt wird. Das Beispiel Dim MyString As String MyString = "Dies war mein Text." Mid(MyString, 6, 3, "ist") ersetzt in der Zeichenfolge MyString ab der sechsten Position drei Zeichen durch die Zeichenfolge ist. Formatieren von ZeichenfolgenDie Funktion Format formatiert Zahlen als Zeichenfolge. Hierzu erwartet die Funktion die Angabe eines Format-Ausdrucks, der dann als Vorlage zur Formatierung der Zahlen verwendet wird. Jeder Platzhalter innerhalb der Vorlage sorgt für eine entsprechende Formatierung dieser Position im Ausgabewert. Die fünf wichtigsten Platzhalter innerhalb einer Vorlage sind die Zeichen Null (0), Doppelkreuz (#), Punkt (.), Komma (,) und Dollar ($). Die Ziffer Null innerhalb der Vorlage sorgt dafür, dass an der betreffenden Stelle stets eine Zahl ausgegeben wird. Ist keine Zahl vorhanden, wird stattdessen 0 angezeigt. Ein Punkt steht für das in den Ländereinstellungen des Betriebssystems definierte Dezimaltrennzeichen. Das folgende Beispiel zeigt, wie sich mit den Zeichen Null und Punkt die Nachkommastellen eines Ausdrucks festlegen lassen: MyFormat = "0.00" MyString = Format(-1579.8, MyFormat) ' Gibt "-1579,80" zurück MyString = Format(1579.8, MyFormat) ' Gibt "1579,80" zurück MyString = Format(0.4, MyFormat) ' Gibt "0,40" zurück MyString = Format(0.434, MyFormat) ' Gibt "0,43" zurück Analog ist es möglich, eine Zahl mit führenden Nullen aufzufüllen, um eine gewünschte Länge zu erzielen: MyFormat = "0000.00" MyString = Format(-1579.8, MyFormat) ' Gibt "-1579,80" zurück MyString = Format(1579.8, MyFormat) ' Gibt "1579,80" zurück MyString = Format(0.4, MyFormat) ' Gibt "0000,40" zurück MyString = Format(0.434, MyFormat) ' Gibt "0000,43" zurück Ein Komma stellt das vom Betriebssystem als Tausendertrennzeichen verwendete Zeichen dar und das Doppelkreuz eine Ziffer oder Position, die nur dann angezeigt wird, wenn sie für die Eingabezeichenfolge erforderlich ist. MyFormat = "#,##0.00" MyString = Format(-1579.8, MyFormat) ' Gibt "-1.579,80" zurück MyString = Format(1579.8, MyFormat) ' Gibt "1.579,80" zurück MyString = Format(0.4, MyFormat) ' Gibt "0,40" zurück MyString = Format(0.434, MyFormat) ' Gibt "0,43" zurück An Stelle des Platzhalters Dollar zeigt die Funktion Format das im Betriebssystem definierte Währungszeichen an: MyFormat = "#,##0.00 $" MyString = Format(-1579.8, MyFormat) ' Gibt "-1.579,80 —" zurück MyString = Format(1579.8, MyFormat) ' Gibt "1.579,80 —" zurück MyString = Format(0.4, MyFormat) ' Gibt "0,40 —" zurück MyString = Format(0.434, MyFormat) ' Gibt "0,43 —" zurück Hinweis – Die in VBA zur Formatierung von Datums- und Zeitangaben verwendeten Format-Anweisungen werden in StarOffice Basic nicht unterstützt. Datum und UhrzeitStarOffice Basic bietet den Datentyp Date, der Datums- und Uhrzeitangaben binär speichert. Angeben von Datums- und Uhrzeitangaben innerhalb des ProgrammcodesSie können einer Date-Variable ein Datum durch Zuweisung einer einfachen Zeichenfolge zuweisen: Dim MyDate As Date MyDate = "1.1.2002" Diese Zuweisung könnte tatsächlich funktionieren, da StarOffice Basic den als String definierten Datumswert automatisch in eine Date-Variable konvertiert. Diese Art der Zuweisung kann jedoch zu Fehlern führen, da Datums- und Zeitwerte von Land zu Land unterschiedlich definiert und dargestellt werden. Da StarOffice Basic bei der Konvertierung einer Zeichenfolge in einen Datumswert die Ländereinstellungen des Betriebssystems verwendet, arbeitet der oben stehende Ausdruck nur so lange korrekt, wie die Ländereinstellungen mit dem Zeichenfolgenausdruck übereinstimmen. Um dieses Problem zu vermeiden, sollte die Funktion DateSerial für die Zuordnung eines festen Werts zu einer Date-Variable verwendet werden: Dim MyVar As Date MyDate = DateSerial (2001, 1, 1) Der Funktionsparameter muss in der Reihenfolge Jahr, Monat, Tag angegeben werden. Die Funktion stellt sicher, dass der Variable unabhängig von den landesspezifischen Einstellungen tatsächlich der richtige Wert zugewiesen wird. Die Funktion TimeSerial formatiert Zeitangaben auf dieselbe Weise wie die Funktion DateSerial Datumsangaben formatiert: Dim MyVar As Date MyDate = TimeSerial(11, 23, 45) Die Parameter der Funktion sind in der Reihenfolge Stunden, Minuten, Sekunden anzugeben. Extrahieren von Datums- und ZeitangabenDas Gegenstück zu den Funktionen DateSerial und TimeSerial bilden die folgenden Funktionen: Diese Funktionen extrahieren die Datums- oder Zeitanteile aus einer angegebenen Date-Variable. Das Beispiel Dim MyDate As Date ' ... Initialisierung von MyDate If Year(MyDate) = 2003 Then ' ... Angegebenes Datum liegt im Jahr 2003 End If prüft, ob das in MyDate gespeicherte Datum im Jahr 2003 liegt. Hierzu analog prüft das Beispiel Dim MyTime As Date ' ... Initialisierung von MyTime If Hour(MyTime) >= 12 And Hour(MyTime) < 14 Then ' ... Angegebene Zeit liegt zwischen 12 und 14 Uhr End If ob MyTime zwischen 12 und 14 Uhr liegt. Die Funktion Weekday gibt die Nummer des Wochentags für das übergebene Datum zurück: Dim MyDate As Date Dim MyWeekday As String ' ... MyDate initialisieren Select Case WeekDay(MyDate) case 1 MyWeekday = "Sonntag" case 2 MyWeekday = "Montag" case 3 MyWeekday = "Dienstag" case 4 MyWeekday = "Mittwoch" case 5 MyWeekday = "Donnerstag" case 6 MyWeekday = "Freitag" case 7 MyWeekday = "Samstag" End Select Hinweis – Sonntag gilt hierbei als erster Tag der Woche. Abrufen von Systemdatum und -zeitZum Abrufen der Systemzeit und des Systemdatums stehen in StarOffice Basic folgende Funktionen zur Verfügung: Dateien und VerzeichnisseDas Arbeiten mit Dateien ist eine der grundlegenden Aufgaben bei einer Anwendung. Die StarOffice API bietet Ihnen eine ganze Reihe von Objekten, mit denen Sie Office-Dokumente erstellen, öffnen und ändern können. Diese werden detailliert in Kapitel 4, Einführung in die StarOffice API, vorgestellt. Unabhängig davon ist es in einigen Fällen notwendig, direkt auf das Dateisystem zuzugreifen, Verzeichnisse zu durchsuchen oder Textdateien zu bearbeiten. Für diese Aufgaben stellt die Laufzeitbibliothek von StarOffice Basic einige grundlegende Funktionen zur Verfügung. Hinweis – Mit StarOffice 8 stehen einige DOS-spezifische Datei- und Verzeichnisfunktionen nicht mehr oder nur noch eingeschränkt zur Verfügung. So fehlt beispielsweise die Unterstützung der Funktionen ChDir, ChDrive und CurDir. In Funktionen, die Dateieigenschaften als Parameter erwarten (etwa zur Differenzierung von versteckten Dateien und Systemdateien), werden einige DOS-spezifische Eigenschaften nicht mehr verwendet. Diese Änderung wurde notwendig, um eine möglichst hohe Plattformunabhängigkeit für StarOffice sicherzustellen. Verwalten von DateienDurchsuchen von VerzeichnissenDas Durchsuchen von Verzeichnissen nach Dateien und Unterverzeichnissen übernimmt in StarOffice Basic die Funktion Dir. Beim ersten Aufruf muss Dir als erster Parameter eine Zeichenfolge zugewiesen werden, die den zu durchsuchenden Verzeichnispfad enthält. Der zweite Parameter von Dir gibt die Datei oder das Verzeichnis an, nach dem gesucht werden soll. StarOffice Basic gibt den Namen des ersten gefundenen Verzeichniseintrags zurück. Um den nächsten Eintrag abzurufen, muss die Funktion Dir ohne Parameter aufgerufen werden. Findet die Funktion Dir keine weiteren Einträge mehr, liefert sie eine leere Zeichenfolge zurück. Das folgende Beispiel zeigt, wie mit der Funktion Dir alle Dateien abgerufen werden können, die sich in einem Verzeichnis befinden. Die Prozedur speichert die einzelnen Dateinamen in der Variable AllFiles und gibt diese im Anschluss in einem Meldungsfenster aus. Sub ShowFiles
Dim NextFile As String
Dim AllFiles As String
AllFiles = ""
NextFile = Dir("C:\", 0)
While NextFile <> ""
AllFiles = AllFiles & Chr(13) & NextFile
NextFile = Dir
Wend
MsgBox AllFiles
End Sub
Die 0 als zweiter Parameter der Funktion Dir sorgt dafür, dass Dir ausschließlich die Namen von Dateien zurückgibt, Verzeichnisse hingegen ignoriert. Folgende Parameter können angegeben werden:
Das folgende Beispiel entspricht praktisch dem oben stehenden, übergibt der Funktion Dir jedoch den Wert 16 als Parameter, so dass diese anstelle der Dateinamen die Unterverzeichnisse eines Ordners zurückgibt. Sub ShowDirs
Dim NextDir As String
Dim AllDirs As String
AllDirs = ""
NextDir = Dir("C:\", 16)
While NextDir <> ""
AllDirs = AllDirs & Chr(13) & NextDir
NextDir = Dir
Wend
MsgBox AllDirs
End Sub
Hinweis – Wird die Funktion Dir in StarOffice Basic mit dem Parameter 16 aufgerufen, werden nur die Unterverzeichnisse eines Ordners zurückgegeben. In VBA gibt die Funktion zusätzlich die Namen der Standarddateien zurück, so dass eine weitere Überprüfung notwendig ist, um nur die Verzeichnisse zu erhalten. Bei Verwendung der Funktion CompatibilityMode ( true ) verhält sich StarOffice Basic wie VBA und die Dir-Funktion gibt bei Verwendung des Parameters 16 Unterverzeichnisse und Standarddateien zurück. Hinweis – Die in VBA vorhandenen Möglichkeiten, Verzeichnisse gezielt nach Dateien mit den Eigenschaften versteckt, Systemdatei, archiviert und Volumenname zu durchsuchen, existieren in StarOffice Basic nicht, da die entsprechenden Dateisystemfunktionen nicht unter allen Betriebssystemen zur Verfügung stehen. Hinweis – Die in Dir aufgeführten Pfadangaben dürfen sowohl in VBA als auch in StarOffice Basic die Platzhalter * und ? verwenden. In StarOffice Basic darf der Platzhalter * im Gegensatz zu VBA jedoch nur als letztes Zeichen eines Dateinamens und/oder einer Dateinamenserweiterung verwendet werden. Erstellen und Löschen von VerzeichnissenFür das Erstellen von Verzeichnissen bietet StarOffice Basic die Funktion MkDir. MkDir ("C:\SubDir1") Diese Funktion erstellt Verzeichnisse und Unterverzeichnisse. Alle innerhalb einer Hierarchie benötigten Verzeichnisse werden bei Bedarf ebenfalls angelegt. Existiert beispielsweise lediglich das Verzeichnis C:\SubDir1, so erstellt ein Aufruf MkDir ("C:\SubDir1\SubDir2\SubDir3\")
sowohl das Verzeichnis C:\SubDir1\SubDir2 als auch das Verzeichnis C:\SubDir1\SubDir2\SubDir3. Die Funktion RmDir löscht Verzeichnisse. RmDir ("C:\SubDir1\SubDir2\SubDir3\") Enthält das Verzeichnis Unterverzeichnisse oder Dateien, so werden diese ebenfalls gelöscht. Aus diesem Grund sollten Sie bei der Verwendung von RmDir vorsichtig sein. Hinweis – In VBA beziehen sich die Funktionen MkDir und RmDir nur auf das aktuelle Verzeichnis. In StarOffice Basic hingegen ist es möglich, mit MkDir und RmDir mehrere Ebenen von Verzeichnissen zu erstellen beziehungsweise zu löschen. Hinweis – In VBA erzeugt RmDir eine Fehlermeldung, wenn ein Verzeichnis eine Datei enthält. In StarOffice Basic wird das Verzeichnis samt allen darin enthaltenen Dateien gelöscht. Bei Verwendung der Funktion CompatibilityMode ( true ) verhält sich StarOffice Basic wie VBA. Kopieren, Umbenennen, Löschen und Prüfen der Existenz von DateienFileCopy(Source, Destination) erstellt eine Kopie der Datei Source unter dem Namen Destination. Name OldName As NewName ist es möglich, die Datei OldName in NewName umzubenennen. Die Syntax mit dem Schlüsselwort As und ohne Verwendung eines Kommas geht auf die Wurzeln von Basic zurück. Kill(Filename) löscht die Datei Filename. Um ein Verzeichnis (mit darin enthaltenen Dateien) zu löschen, verwenden Sie die Funktion RmDir. Ob eine Datei existiert, lässt sich mit der Funktion FileExists prüfen: If FileExists(Filename) Then MsgBox "Datei existiert." End If Lesen und Ändern von DateieigenschaftenBei der Arbeit mit Dateien ist es mitunter wichtig, die Dateieigenschaften, den Zeitpunkt der letzten Dateiänderung und die Länge der Datei zu ermitteln. Dim Attr As Integer Attr = GetAttr(Filename) gibt einige Eigenschaften einer Datei zurück. Der Rückgabewert wird als Bit-Maske bereitgestellt, wobei folgende Werte möglich sind:
Das Beispiel Dim FileMask As Integer
Dim FileDescription As String
FileMask = GetAttr("test.txt")
If (FileMask AND 1) > 0 Then
FileDescription = FileDescription & " read-only "
End IF
If (FileMask AND 16) > 0 Then
FileDescription = FileDescription & " directory "
End IF
If FileDescription = "" Then
FileDescription = " normal "
End IF
MsgBox FileDescription
ermittelt die Bit-Maske der Datei test.txt und prüft, ob diese schreibgeschützt und/oder ein Verzeichnis ist. Trifft keiner dieser Fälle zu, wird der FileDescription die Zeichenfolge "normal" zugewiesen. Hinweis – Die in VBA zum Abfragen der Dateieigenschaften versteckt, Systemdatei, archiviert und Volumenname verwendeten Flags werden in StarOffice Basic nicht unterstützt, da diese Windows-spezifisch sind und unter anderen Betriebssystemen nicht oder nur teilweise zur Verfügung stehen. Die Funktion SetAttr gestattet es, die Eigenschaften einer Datei zu ändern. Der Aufruf SetAttr("test.txt", 1)
kann deshalb dazu verwendet werden, eine Datei mit einem Schreibschutz zu versehen. Ein bestehender Schreibschutz kann mit dem folgenden Aufruf gelöscht werden. SetAttr("test.txt", 0)
Das Datum und die Uhrzeit der letzten Änderung einer Datei liefert die Funktion FileDateTime. Das Datum wird dabei gemäß den im System festgelegten Ländereinstellungen formatiert. FileDateTime("test.txt") ' Gibt Datum und Uhrzeit der letzten Dateiänderung zurück.
Die Funktion FileLen bestimmt die Länge einer Datei in Byte (als Long Integer-Wert). FileLen("test.txt") ' Gibt die Länge der Datei in Byte zurück.
Schreiben und Lesen von TextdateienStarOffice Basic bietet eine ganze Reihe von Methoden zum Lesen und Schreiben von Dateien. Die folgenden Erläuterungen beziehen sich auf das Arbeiten mit Textdateien (nicht Textdokumenten). Schreiben von TextdateienVor dem Zugriff auf eine Textdatei muss diese zunächst geöffnet werden. Hierzu wird ein freier Datei-Handle benötigt, der die Datei bei allen späteren Dateizugriffen eindeutig identifiziert. Zum Erstellen eines freien Datei-Handles wird die Funktion FreeFile verwendet. Der Handle dient als Parameter der Open-Anweisung, mit der die Datei geöffnet wird. Soll die Datei so geöffnet werden, dass sie als Textdatei angegeben werden kann, lautet der Open-Aufruf: Open Filename For Output As #FileNo Filename ist eine Zeichenfolge (String), die den Namen der Datei enthält. FileNo ist der mit der Funktion FreeFile erstellte Handle. Ist die Datei geöffnet, lässt sie sich zeilenweise über die Anweisung Print beschreiben: Print #FileNo, "Dies ist eine Testzeile." FileNo steht auch hier für den Datei-Handle. Der zweite Parameter gibt den Text an, der als Zeile der Textdatei gespeichert werden soll. Ist der Schreibvorgang abgeschlossen, so muss die Datei über einen Close-Aufruf geschlossen werden: Close #FileNo Auch hier ist der Datei-Handle anzugeben. Das folgende Beispiel zeigt, wie eine Textdatei geöffnet, beschrieben und geschlossen wird: Dim FileNo As Integer Dim CurrentLine As String Dim Filename As String Filename = "c:\data.txt" ' Dateinamen definieren FileNo = Freefile ' Freien Datei-Handle ermitteln Open Filename For Output As #FileNo ' Datei öffnen (Schreibmodus) Print #FileNo, "Dies ist eine Zeile Text." ' Zeile speichern Print #FileNo, "Dies ist eine weitere Zeile Text." ' Zeile speichern Close #FileNo ' Datei schließen Lesen von TextdateienDas Lesen von Textdateien erfolgt analog zum Schreiben der Datei. Die zum Öffnen der Datei verwendete Open-Anweisung enthält anstelle des Ausdrucks For Output den Ausdruck For Input und anstelle des Print-Befehls zum Schreiben der Daten ist die Line Input-Anweisung zum Lesen der Daten zu verwenden. Schließlich dient beim Auslesen einer Textdatei die Anweisung eof(FileNo) zur Prüfung, ob das Ende der Datei erreicht wurde. Das folgende Beispiel zeigt, wie eine Textdatei eingelesen werden kann: Dim FileNo As Integer
Dim CurrentLine As String
Dim File As String
Dim Msg as String
' Dateinamen definieren
Filename = "c:\data.txt"
' Freien Datei-Handle ermitteln
FileNo = Freefile
' Datei öffnen (Lesemodus)
Open Filename For Input As FileNo
' Prüfen, ob Dateiende erreicht ist.
Do While not eof(FileNo)
' Zeile lesen
Line Input #FileNo, CurrentLine
If CurrentLine <>"" then
Msg = Msg & CurrentLine & Chr(13)
end if
Loop
' Datei schließen
Close #FileNo
Msgbox Msg
Die einzelnen Zeilen werden in einer Do While-Schleife abgerufen, in der Variable Msg gespeichert und am Ende in einem Meldungsfenster angezeigt. Meldungs- und EingabefensterFür eine einfache Benutzerkommunikation stellt StarOffice Basic die Funktionen MsgBox und InputBox bereit. Anzeigen von MeldungenMsgBox zeigt ein grundlegendes Hinweisfenster an, in dem eine oder mehrere Schaltflächen vorhanden sein können. In der einfachsten Variante MsgBox "Dies ist ein Hinweis!" enthält MsgBox lediglich Text und die Schaltfläche "OK". Das Erscheinungsbild des Hinweisfensters kann über einen Parameter geändert werden. Der Parameter bietet die Möglichkeit, zusätzliche Schaltflächen hinzuzufügen, die vorbelegte Schaltfläche festzulegen und ein Hinweissymbol hinzuzufügen. Die Werte für das Auswählen der Schaltflächen lauten:
Um eine Schaltfläche als Standardschaltfläche festzulegen, addieren Sie dem Parameterwert aus der Liste der Schaltflächenauswahlen einen der folgenden Werte hinzu. Um beispielsweise die Schaltflächen "Ja", "Nein" und "Abbrechen" zu erstellen (Wert 3), mit "Abbrechen" als Standard (Wert 512), lautet der Parameterwert 3 + 512 = 515.
Schließlich stehen folgende Hinweissymbole zur Verfügung, die sich ebenfalls durch Addition des jeweiligen Parameterwerts anzeigen lassen:
Der Aufruf MsgBox "Möchten Sie fortfahren?", 292 gibt ein Hinweisfenster mit den Schaltflächen "Ja" und "Nein" (Wert 4) aus, von denen die zweite Schaltfläche (Nein) als Standardwert festgelegt ist (Wert 256) und das zusätzlich ein Fragezeichen enthält (Wert 32), 4+256+32=292. Enthält ein Hinweisfenster mehrere Schaltflächen, sollte sein Rückgabewert abgefragt werden, um zu ermitteln, welche Schaltfläche geklickt wurde. In diesem Fall stehen folgende Rückgabewerte zur Verfügung:
Im obigen Beispiel könnte eine Prüfung des Rückgabewerts wie folgt aussehen: If MsgBox ("Möchten Sie fortfahren?", 292) = 6 Then
' Schaltfläche "Ja" geklickt
Else
' Schaltfläche "Nein" geklickt
End IF
Neben dem Hinweistext und dem Parameter für die Gestaltung des Hinweisfensters gestattet MsgBox die zusätzliche Angabe eines dritten Parameters, der den Text für den Fenstertitel festlegt: MsgBox "Möchten Sie fortfahren?", 292, "Fenstertitel" Wird kein Fenstertitel angegeben, lautet dieser "soffice". Eingabefenster zur Abfrage einfacher ZeichenfolgenDie Funktion InputBox fragt einfache Zeichenfolgen vom Anwender ab. Sie stellt damit eine einfache Alternative zur Konfiguration von Dialogen dar. InputBox nimmt drei Standardparameter entgegen:
InputVal = InputBox("Bitte Wert eingeben:", "Test", "Standardwert")
Als Rückgabewert gibt InputBox die vom Anwender eingegebene Zeichenfolge zurück. Sonstige FunktionenBeepMit der Beep-Funktion kann über das System ein Klang ausgegeben werden, mit dem der Anwender vor einer fehlerhaften Eingabe gewarnt werden kann. Beep wird ohne jeden Parameter aufgerufen: Beep ' Erzeugt einen Hinweiston ShellMit der Shell-Funktion können Sie externe Programme starten. Shell(Pathname, Windowstyle, Param) Pathname definiert den Pfad des auszuführenden Programms. Windowstyle definiert das Fenster, in dem das Programm gestartet wird. Folgende Werte sind möglich:
Der dritte Parameter Param gestattet die Übergabe von Kommandozeilenparameter an das zu startende Programm. WaitDie Funktion Wait unterbricht die Programmausführung für eine vorgegebene Zeit. Die Angabe der Wartezeit erfolgt in Millisekunden. Der Befehl Wait 2000 sorgt für eine Unterbrechung von 2 Sekunden (2000 Millisekunden). EnvironDie Funktion Environ gibt die Umgebungsvariablen des Betriebssystems zurück. Je nach System und Konfiguration werden darin unterschiedliche Daten gespeichert. Der Aufruf Dim TempDir
TempDir=Environ ("TEMP")
bestimmt beispielsweise die Umgebungsvariable für das temporäre Verzeichnis des Betriebssystems. |