StarOffice 8 Programmierhandbuch für BASIC
只搜尋這本書
以 PDF 格式下載這本書 (1551 KB)

Kapitel 3 Die Laufzeitbibliothek von StarOffice Basic

Die folgenden Abschnitte stellen die zentralen Funktionen der Laufzeitbibliothek vor.

Konvertierungsfunktionen

In vielen Situationen kommt es vor, dass eine Variable eines Typs in eine Variable eines anderen Typs umgewandelt werden muss.

Implizite und explizite Typumwandlungen

Die 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:

  • CStr(Var): konvertiert jeden Datentyp in den Typ String (Zeichenfolge).

  • CInt(Var): konvertiert jeden Datentyp in einen Integer-Wert.

  • CLng(Var): konvertiert jeden Datentyp in einen Long-Wert.

  • CSng(Var): konvertiert jeden Datentyp in einen Single-Wert.

  • CDbl(Var): konvertiert jeden Datentyp in einen Double-Wert.

  • CBool(Var): konvertiert jeden Datentyp in einen Boolean-Wert.

  • CDate(Var): konvertiert jeden Datentyp in einen Date-Wert.

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 Variablen

In 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:

  • IsNumeric(Value): prüft, ob ein Wert eine Zahl ist.

  • IsDate(Value): prüft, ob ein Wert ein Datum ist.

  • IsArray(Value): prüft, ob ein Wert ein Array ist.

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.


Zeichenfolgen

Arbeiten mit Zeichensätzen

StarOffice 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 Zeichenfolge

StarOffice Basic bietet vier Funktionen, die Teilzeichenfolgen zurückgeben:

  • Left(MyString, Length): gibt die Length ersten Zeichen von MyString zurück.

  • Right(MyString, Length): gibt die Length ersten Zeichen von MyString zurück.

  • Mid(MyString, Start, Length): gibt die Length ersten Zeichen von MyString ab der Startposition Start zurück.

  • Len(MyString): gibt die Anzahl der in MyString vorhandenen Zeichen zurück.

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 Ersetzen

Fü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 Zeichenfolgen

Die 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 Uhrzeit

StarOffice Basic bietet den Datentyp Date, der Datums- und Uhrzeitangaben binär speichert.

Angeben von Datums- und Uhrzeitangaben innerhalb des Programmcodes

Sie 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 Zeitangaben

Das Gegenstück zu den Funktionen DateSerial und TimeSerial bilden die folgenden Funktionen:

  • Day(MyDate): gibt den Tag des Monats von MyDate zurück.

  • Month(MyDate): gibt den Monat von MyDate zurück.

  • Year(MyDate): gibt das Jahr von MyDate zurück.

  • Weekday(MyDate): gibt die Nummer des Wochentags von MyDate zurück.

  • Hour(MyTime): gibt die Stunden von MyTime zurück.

  • Minute(MyTime): gibt die Minuten von MyTime zurück.

  • Second(MyTime): gibt die Sekunden von MyTime zurück.

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 -zeit

Zum Abrufen der Systemzeit und des Systemdatums stehen in StarOffice Basic folgende Funktionen zur Verfügung:

  • Date: gibt das aktuelle Datum zurück.

  • Time: gibt die aktuelle Uhrzeit zurück.

  • Now: gibt den aktuellen Zeitpunkt zurück (Kombinationswert aus Datum und Uhrzeit).

Dateien und Verzeichnisse

Das 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 Dateien

Durchsuchen von Verzeichnissen

Das 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:

  • 0: gibt normale Dateien zurück.

  • 16: Unterverzeichnisse.

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 Verzeichnissen

Fü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 Dateien

Der Aufruf

FileCopy(Source, Destination)

erstellt eine Kopie der Datei Source unter dem Namen Destination.

Mit Hilfe der Funktion

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.

Der Aufruf

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 Dateieigenschaften

Bei der Arbeit mit Dateien ist es mitunter wichtig, die Dateieigenschaften, den Zeitpunkt der letzten Dateiänderung und die Länge der Datei zu ermitteln.

Der Aufruf

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:

  • 1: schreibgeschützte Datei

  • 16: Name eines Verzeichnisses

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 Textdateien

StarOffice 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 Textdateien

Vor 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 Textdateien

Das 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 Eingabefenster

Für eine einfache Benutzerkommunikation stellt StarOffice Basic die Funktionen MsgBox und InputBox bereit.

Anzeigen von Meldungen

MsgBox 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:

  • 0: Schaltfläche "OK"

  • 1: Schaltflächen "OK" und "Abbrechen"

  • 2: Schaltflächen "Abbrechen" und "Wiederholen"

  • 3: Schaltflächen "Ja", "Nein" und "Abbrechen"

  • 4: Schaltflächen "Ja" und "Nein"

  • 5: Schaltflächen "Wiederholen" und "Abbrechen"

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.

  • 0: Erste Schaltfläche ist Standardwert.

  • 256: Zweite Schaltfläche ist Standardwert.

  • 512: Dritte Schaltfläche ist Standardwert.

Schließlich stehen folgende Hinweissymbole zur Verfügung, die sich ebenfalls durch Addition des jeweiligen Parameterwerts anzeigen lassen:

  • 16: Stopp-Schild

  • 32: Fragezeichen

  • 48: Ausrufezeichen

  • 64: Tipp-Symbol

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:

  • 1: OK

  • 2: Abbrechen

  • 4: Wiederholen

  • 5: Ignorieren

  • 6: Ja

  • 7: Nein

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 Zeichenfolgen

Die Funktion InputBox fragt einfache Zeichenfolgen vom Anwender ab. Sie stellt damit eine einfache Alternative zur Konfiguration von Dialogen dar. InputBox nimmt drei Standardparameter entgegen:

  • einen Hinweistext,

  • einen Fenstertitel,

  • einen Vorgabewert, der innerhalb des Eingabereichs angezeigt werden kann.

InputVal = InputBox("Bitte Wert eingeben:", "Test", "Standardwert")

Als Rückgabewert gibt InputBox die vom Anwender eingegebene Zeichenfolge zurück.

Sonstige Funktionen

Beep

Mit 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

Shell

Mit 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:

  • 0: Das Programm erhält den Fokus und wird in einem versteckten Fenster gestartet.

  • 1: Das Programm erhält den Fokus und wird in einem Fenster in Normalgröße gestartet.

  • 2: Das Programm erhält den Fokus und wird in einem minimierten Fenster gestartet.

  • 3: Das Programm erhält den Fokus und wird in einem maximierten Fenster gestartet.

  • 4: Das Programm wird in einem Fenster in Normalgröße gestartet, ohne den Fokus zu erhalten.

  • 6: Das Programm wird in einem minimierten Fenster gestartet und der Fokus bleibt im aktuellen Fenster.

  • 10: Das Programm wird im Vollbildmodus gestartet.

Der dritte Parameter Param gestattet die Übergabe von Kommandozeilenparameter an das zu startende Programm.

Wait

Die 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).

Environ

Die 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.