W e r n i g e r o d e
Fachbereich Automatisierung und Informatik
Wahlpflichtvorlesung „Programmierung in ArcView“
Version: 14.09.2008
Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Friedrichstraße 57 - 59
38855 Wernigerode
Raum: 2.202
Tel.: 03943/659-338 Fax: 03943/659-399
Email: mwilhlem@hs-harz.de Raum: 2.202
Tel.: 03943/659-338 Fax: 03943/659-399
Email: mwilhelm@hs-harz.de Internet: http://mwilhelm.hs-harz.de
Download ArcView-Sktipte / Dokumente:
http://mwilhelm.hs-harz.de/download/arcview/
Symbolpfad: C:\ESRI\AV_GIS30\ARCVIEW\SYMBOL\
Erweiterungspfad: C:\ESRI\AV_GIS30\ARCVIEW\EXT32\
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 3
Inhaltsverzeichnis
1 Objekte in Avenue ... 10
1.1 View... 11
1.1.1 Änderungen im View... 11
1.1.2 Wichtige Methoden für die Attribute ... 11
1.1.3 Manipulation eines Views ... 11
1.2 Table ... 11
1.2.1 Ändern der Attribute... 11
1.2.2 Änderungen in der Tabelle ... 12
1.3 Layout ... 12
1.4 Script... 12
1.4.1 Änderung des aktuellen Scripts ... 13
2 Scripte in Avenue... 14
2.1 Was ist ein Script ... 14
2.2 Variablen... 14
2.2.1 Strings... 14
2.3 Number ... 15
2.4 Boolean ... 17
2.5 Listen ... 17
2.6 If-Anweisung ... 18
2.7 Schleifen ... 19
2.7.1 While-Schleife ... 19
2.7.2 For Each-Schleife ... 19
2.8 For Each Schleifen mit Schlüssenwort By... 20
3 Einfache Programmierung ... 22
3.1 Ausgabe mit der Klasse MsgBox... 22
3.2 Eingabe mit der MsgBox ... 24
3.2.1 Ja/Nein-Abfragen: ... 24
3.2.2 Auswahl aus einer Liste... 24
3.2.3 Eingabe eines Textes ... 25
4 Verknüpfung ... 28
4.1 Scripttypen ... 28
4.2 Namensgebung... 28
4.3 Verknüpfung eines Skriptes mit einem Menü... 29
4.4 Verknüpfung eines Skriptes mit dem ButtonBar ... 31
4.5 Verknüpfung eines Skriptes mit der Werkzeugleiste... 32
5 Dateiein- und Ausgabe... 36
5.1 Dateidialoge ... 36
5.1.1 Auswahl einer Datei zum Speichern... 36
5.1.2 Auswahl einer Datei zum Laden... 36
5.2 Schreiben und Lesen einer Datei ... 37
5.3 Beispiel für die Auswahl einer Datei und das Lesen ... 38
5.4 Beispiel Speichern aller sichtbaren Themen... 39
6 Zugriff auf eine DLL... 41
6.1 Methoden der Klasse DLL... 41
6.2 Methoden der Klasse DLLProc ... 42
6.2.1 Definitionen der Parameter einer DLL ... 42
6.3 MS Visual-Studio ... 46
7 INI-Datei ... 48
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 4
8 Erweiterungen ... 54
9 Beispiele... 66
9.1 Alle Themen anzeigen ... 66
9.2 Alle Selektierte Themen anzeigen ... 68
9.3 Punkt / Line / Fläche im Auswahlfenster... 69
9.4 Alle Datensätze anzeigen... 70
9.5 Alle markierten Datensätze anzeigen... 70
9.6 Ausgabe der Koordinaten einer Linie ... 71
9.7 Erzeugen einer Polylinie ... 73
9.8 Ausgabe in einer Datei... 77
9.9 Lesen aus einer Datei ... 78
9.10 Aufruf von Scripten... 79
10 Tipps... 82
10.1 Modify des Projektes... 82
10.2 Kreiszahl Pi ... 82
10.3 Numberformat ... 82
10.4 Arbeitsverzeichnis... 83
10.5 String Ersetzen ... 83
10.6 Trim... 84
10.7 Quote ... 84
10.8 Zwischenablage... 84
10.8.1 Methoden der Klasse Clipboard ... 85
10.9 Mathematische Funktionen ... 85
10.10 Abgeleitete mathematische Funktionen ... 86
10.11 Funktionen des Typs Shape... 87
10.12 Funktionen der Klasse Zeichenfolge... 87
10.13 Funktionen der Klasse Zahl... 89
11 Literatur ... 91
12 Anhang ... 92
12.1 Konventionen ... 92
12.1.1 Namenskonvention ... 92
12.1.2 Ungarische Notation ... 92
12.1.3 Globale Variablen... 93
12.1.4 Überprüfen der Parameter ... 93
12.1.5 ScriptHeader ... 93
12.2 Sonderzeichen ... 94
12.3 Konstanten für Datei-Operationen ... 94
12.4 Konstanten für neue Felder ... 95
12.5 GetPrivateProfileInt ... 97
12.6 Export nach Excel ... 99
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 5
Abbildungsverzeichnis
Abbildung 1 Module in ArcView ... 10
Abbildung 2 Beispiel eines Layouts... 12
Abbildung 3 Beispiel des Moduls Scripte... 13
Abbildung 4 Ergebnis der Berechnung (Kreisfläche) ... 16
Abbildung 5 Liste mit Zahlen ... 17
Abbildung 6 Beispiel für MsgBox.Info ... 22
Abbildung 7 Beispiel einer MsgBox.Error ... 23
Abbildung 8 Beispiel einer MsgBox.Warning... 23
Abbildung 9 Ausgabe einer Report-Box... 24
Abbildung 10 Beispiel einer Eingabezeile ... 26
Abbildung 11 Beispiel einer MultiInput-Eingabe ... 26
Abbildung 12 Paßwort-Eingabe ... 27
Abbildung 13 Schalterleiste vs. Toolleiste... 28
Abbildung 14 Dialogfenster der Menüs und Schalter ... 29
Abbildung 15 Neues Menü... 30
Abbildung 16 Script-Manager... 31
Abbildung 17 Scriptname eintragen... 31
Abbildung 18 Symbol-Manager ... 31
Abbildung 19 Laden eines eigenen Symbols ... 32
Abbildung 20 Schalter in der Werkzeugleiste... 33
Abbildung 21 Erzeugen eines neuen Werkzeugmenüs ... 33
Abbildung 22 Anzeige aller Themen (Beispiel)... 66
Abbildung 23 Anzeige aller selektierten Themen ... 68
Abbildung 24 Ausgabe der Kooordinaten... 73
Abbildung 25 Unterschied SetDefFormat / SetFotmat... 83
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 6
Quellcode
Quellcode 1 Entfernen der Leerzeichen ... 15
Quellcode 2 Umwandlung von Komma in Punkt... 15
Quellcode 3 Bestimmen des Laufwerks ... 15
Quellcode 4 Einfache Berechnung in Avenue... 16
Quellcode 5 Berechnung des Kreisumfangs... 16
Quellcode 6 Ausgabe einer Zahl ... 16
Quellcode 7 Liste... 17
Quellcode 8 Einfache If-Anweisung ... 18
Quellcode 9 Einfache If-Then Anweisung ... 18
Quellcode 10 While-Schleife... 19
Quellcode 11 While-Schleife mit einer break-Anweisung ... 19
Quellcode 12 Summenberechnung mit einer festen Grenze (For-Schleife) ... 20
Quellcode 13 Summenberechnung mit einer variablen Grenze (For-Schleife)... 20
Quellcode 14 Summenberechnung mit einer Liste (For-Schleife). ... 20
Quellcode 15 Summenberechnung mit einer variablen Grenze und einer Schrittweite ... 20
Quellcode 16 Summenberechnung mit einer variablen Grenze und einer Schrittweite ... 21
Quellcode 17 Info-Box ... 22
Quellcode 18 Error-Box ... 22
Quellcode 19 Warning-Box ... 23
Quellcode 20 Report-Box ... 23
Quellcode 21 Liste aller Themen... 25
Quellcode 22 Input-Box ... 25
Quellcode 23 Multi-InputBox... 26
Quellcode 24 Password-Eingabe ... 27
Quellcode 25 Click-Script ... 34
Quellcode 26 Click-Script ... 34
Quellcode 27 Update-Script ... 35
Quellcode 28 Aufruf von math.dll... 43
Quellcode 29 Bestimmen des Systempfades ... 45
Quellcode 30 Lesen einer Ini-Datei ... 52
Quellcode 31 Script zur Erzeugung einer Extension ... 60
Quellcode 32 Install-Script ... 63
Quellcode 33 UnInstall-Script ... 65
Quellcode 34 Alle Themen anzeigen... 66
Quellcode 35 Thema.setVisible(false)... 67
Quellcode 36 Theme.setVisible(false) mit sortierter Liste ... 67
Quellcode 37 Alle selektierten Themen anzeigen ... 68
Quellcode 38 Punkt / Linie / Fläche in einer Liste ... 69
Quellcode 39 Alle Datensätze anzeigen ... 70
Quellcode 40 Alle markierten Datensätze anzeigen ... 70
Quellcode 41 Anzeige aller (markierten) Datensätze ... 71
Quellcode 42 Anzeige aller Koordinaten eines Datensatzes ... 71
Quellcode 43 Aus Koordinaten eine neue Linie erzeugen... 75
Quellcode 44 Ausgabe in einer Datei ... 77
Quellcode 45 Einlesen aus einer Datei ... 78
Quellcode 46 Aufruf eines Scriptes ohne Parameter ... 79
Quellcode 47 Auswahl mehrerer Themen ... 79
Quellcode 48 Auswahl mehrere Themen... 80
Quellcode 49 Aufruf eines anderen Scriptes ... 80
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 7
Quellcode 50 Script wird aufgerufen und gibt eine Liste zurück ... 81
Quellcode 51 Modify des Projektes... 82
Quellcode 52 Kreiszahl Pi ... 82
Quellcode 53 Numberformat ... 82
Quellcode 54 Script.Numberformat... 82
Quellcode 55 Ausgabe einer Zahl... 83
Quellcode 56 ArcView-Arbeitsverzeichnis ... 83
Quellcode 57 Teilstring in einem String ersetzen... 84
Quellcode 58 Trim eines Strings ... 84
Quellcode 59 Quote (Hochkomma eines String) ... 84
Quellcode 60 Einfügen eines Strings in die Zwischenablage... 85
Quellcode 61 Parameter Check ... 93
Quellcode 62 Scriptheader... 94
Quellcode 63 GetPrivateProfileInt... 99
Quellcode 64 Export nach Excel ... 100
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 8
Dokumentation
Dokumentation 1 GetSystemDirectory... 44
Dokumentation 2 Ini-Datei ... 48
Dokumentation 3 GetPrivateProfileString ... 50
Dokumentation 4 Beispieldatei HSHARZ.ini... 50
Dokumentation 5 GetPrivateProfileInt ... 98
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 9
Dateierweiterungsverzeichnis
Normale Dateierweiterungen:
BMP Grafikdatei, die als Pixeldatei aufgebaut ist. Sie hat eine feste Größe und kann je nach Farbtiefe eine Dateigröße von 1 bis 30 Megabyte besitzen.
DBF Datenbankfile (Datenbankdatei, dBase)
DBS Datenbanksystem
DOS Disk Operating System (Betriebssystem)
GIS Geografischen-Informations-System
JPG Grafikdatei, die als Pixeldatei aufgebaut ist. Sie hat eine feste Größe und kann je nach Farbtiefe eine Dateigröße von 1 bis 30 Megabyte besitzen.
OLE OLE ist eine Abkürzung für Object Linking and Embedding. Mit OLE können Sie Daten aus Anwendungen (Servern) in andere Anwendungen (Client) einfügen.
DDE Dynamic Data Exchange. Mit dieser Client-Server-Methode können Anwendungen gesteuert werden. ArcView kann sowohl Server als auch Client sein.
TIF Grafikdatei, die als Pixeldatei aufgebaut ist. Sie hat eine feste Größe und kann je nach Farbtiefe eine Dateigröße von 1 bis 30 Megabyte besitzen. Wichtig dabei ist, dass mehrere Untervarianten.
ArcView-Dateien:
SHP SHP ist die Abkürzung für Shape-Dateien von Arcview.
SHX SHX ist eine ArcView-Datei (Index-Datei).
SBN SBN ist eine ArcView-Datei
SBX SBN ist eine ArcView-Datei (Indexdatei der SBN-Datei).
DBF DBF-Dateien beinhalten die Attributfelder.
ODB Object Database File
AVX ArcView Erweiterung
AVE Avenue Script
APR ArcView Projekt-Datei
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 10
1 Objekte in Avenue
In ArcView existieren mehrere Module. Aufgerufen werden diese im Hauptfenster (siehe Abbildung 1). Am bekanntesten ist das Modul „Views“, welches die Shapes und Rasterdaten anzeigt. Die Inhalte der Shapes werden im Modul „Tabellen“ angezeigt.
Abbildung 1 Module in ArcView
Alle Module sind über das Objekt „av“ erreichbar. Die folgenden Kapitel beschreiben kurz die einzelnen Module.
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 11
1.1 View
In einem View werden die Themen graphisch dargestellt. Es können Shapes, Rasterdaten und Imagekataloge eingefügt werden. Die Klasse „View“ hat folgende Methoden:
1.1.1 Änderungen im View
AddTheme ( aTheme ) Fügt ein Thema zum aktuellen View
DeleteTheme ( aTheme ) Löscht das Thema aus dem View
FindTheme ( aName ) : Sucht das Thema mit den String aName. Das Ergebnis ist nil oder ein Objekt vom Typ Theme
FindThemeByClass ( aName, aClass ): Sucht das Thema mit den String aName. Das Ergebnis ist nil oder ein Objekt vom Typ Theme
1.1.2 Wichtige Methoden für die Attribute
GetActiveThemes : Ergebnis ist eine Liste aller markierten Themen
GetThemes : Ergebnis ist eine Liste aller Themen
GetVisibleThemes : Ergebnis ist eine Liste aller sichtbaren Themen
GetTOC : Liefert das Objekt für die Legende
1.1.3 Manipulation eines Views
Invalidate Zeigt an, das der View neu gezeichnet werden muss.
InvalidateTOC ( aTheme ) Zeigt an, das alle Themen oberhalb von aTheme neu gezeichnet werden müssen.
1.2 Table
Die Tabelle zeigt die Attribute der einzelnen Themen an. Es ist ähnlich aufgebaut wie eine Exceltabelle. Unterschieden wird zwischen den Koordinaten (Shape) und den Attribute der Tabelle..
Die Klasse „Table“ hat folgende Methoden:
1.2.1 Ändern der Attribute
GetActiveField : Das Ergebnis ist das aktive Feld (Typ Field) oder nil.
GetVTab : Liefert einen Zeiger auf Einträge der Tabelle.
SetActiveField ( aField ) Setzt das aktive Feld
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 12
1.2.2 Änderungen in der Tabelle
MakeField : Field Erzeugt ein neues Feld
1.3 Layout
Ein Layout ist ein Karte welches aus einem View und zusätzliche Objekten (Nordpfeil, Legende, Maßstab) besteht. Dieses Layout kann exportiert oder gedruckt werden.
Abbildung 2 Beispiel eines Layouts
1.4 Script
Das Modul Script sammelt alle Avenuescripte im Projekt. Sie werden als Liste verwaltet (siehe Abbildung 3). Mit dem Schalter „Neu“ wird ein neues Script erzeugt.
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 13
Abbildung 3 Beispiel des Moduls Scripte
Die Klasse „Script“ hat folgende Methoden:
1.4.1 Änderung des aktuellen Scripts
SetDateFormat ( aString ) Änderung des Datumsformat
SetNumberFormat ( aString ) Änderung des Format der Stringanzeige (Siehe Seite 82)
asEncrypted : Dient der Verschlüsselung der Scripte
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 14
2 Scripte in Avenue
2.1 Was ist ein Script
Ein Script – ein Makro – ist die Ansammlung von Befehlen, die nacheinander ausgeführt werden. Die Befehle werden in einer Datei gespeichert und können manuell oder mit Hilfe von Menüs bzw.
Schaltern gestartet werden. Neben einfachen Befehlsfolgen erlauben sie die Verwendung von Variablen, Schleifen und Prozeduraufrufen.
2.2 Variablen
Variablen sind ein wichtiges Mittel um Daten temporär zu speichern. Dabei wird die Groß- und Kleinschreibung ignoriert. Zwei Klassen der Variablen existieren (lokale und globale). Eine globale Variable hat im Namen einen Underscore „_“ vorangestellt. Variablendeklarationen sind in Avenue nicht notwendig und möglich.
2.2.1 Strings
Die Klasse String erlaubt die Speicherung von Zeichen beliebiger Länge.
Beispiel:
a = "Hello World"
b = a.UCase
Im obigen Beispiel wird der Variable b der Text „HELLO WORLD“ zugewiesen.
Methoden der Klasse String:
SetCaseSensitiveCompare ( useCase ) Setzt den Vergleichsmodus IsCaseSensitiveCompare : Boolean Prüft den Vergleichsmodus
MakeBuffer ( numberOfBlanks ) : String Erzeugt einen leeren String
Contains ( anotherString ) : Boolean Prüft, ob ein Substring enthalten ist.
Count : Number Anzahl der Zeichen
IndexOf ( anotherString ) : Number Sucht einen SubString
AsFileName : FileName Umwandlung in einen Filename
IsNumber : Boolean Ist der String eine gültige Zahl
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 15
AsString Umwandlung in einem String (wichtig wenn der
String nil ist )
BasicTrim ( leftChars, rightChars ) : String Abschneiden an den Rändern
LCase : String Umwandlung in Kleinbuchstaben
Left ( nChars ) : String Holt die ersten n Zeichen
Middle ( Offset, nChars ) : String Teilstring ausschneiden
Quote : String Fügt an den Enden ein Hochkomma ein. Wird bei
der Query-Anweisung benötigt.
Right ( nChars ) : String Holt die letzten n Zeichen
Substitute ( matchStr, replaceStr ) : String Ersetzt Teile in String.
Trim : String Abschneiden der Leerzeichen an den Enden
UCase : String Umwandlung in Großbuchstaben
Unquote : String Entfernt die Hochkomma an den Enden.
Beispiele:
' Entfernen der Leerzeichen sStr = " Hallo "
sNeu = sStr.Trim
Quellcode 1 Entfernen der Leerzeichen
' Umwandlung von Komma in Punkt sStr = "1234,567 "
sNeu = sStr.Substitute( ",", "." ) Quellcode 2 Umwandlung von Komma in Punkt
' Bestimmen des Laufwerks sStr = "C:\ArcView\bsp.Apr"
sNeu = sStr.Left(3) ' Ergebnis: "C:\"
Quellcode 3 Bestimmen des Laufwerks
2.3 Number
Die Klasse Number dient der Speicherung und Berechnung von Zahlen. Es wird nicht zwischen Ganzzahligen und Nachkommastellen unterschieden. Eine Deklaration vorab ist nicht möglich.
Methoden der Klasse Number:
GetEuler : Number Liefert die Euler‘sche Zahl (2.71828)
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 16
GetPi : Number Liefert die Kreiszahl π
MakeRandom ( min, max ) : Number Erzeugt eine „Zufallszahl“
Number.SetDefFormat ( aFormatString ) Setzt das Ausgabeformat für alle Zahlen ohne eigenes Format (Siehe Seite 82)
SetFormat ( aFormatString ) : Number Setzt das Ausgabeformat der aktuellen Zahl (Siehe Seite 82)
SetFormatPrecision ( num ) : Number Setzt das Ausgabeformat (Siehe Seite 82)
Mathematische Funktionen: Siehe 85
Beispiele:
A = 3 B = A+1 C = A+2*B
MsgBox.Info(C.AsString,"Ergebnis C") ' Ergebnis korrekt Quellcode 4 Einfache Berechnung in Avenue
Radius = 3
Umfang = Radius*2* Number.getPi
MsgBox.Info(Umfang.AsString,"Ergebnis Umfang ") Quellcode 5 Berechnung des Kreisumfangs
Radius = 3
Flaeche = Radius* Radius * Number.getPi Number.setDefFormat("d,dd")
MsgBox.Info(Flaeche.AsString+" m²","Ergebnis der Fläche") Quellcode 6 Ausgabe einer Zahl
Ergebnis:
Abbildung 4 Ergebnis der Berechnung (Kreisfläche)
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 17
2.4 Boolean
Variablen diesen Typs können nur die Werte true oder false annehmen.
2.5 Listen
Listen werden benötigt, um Objekte in einer Liste zu speichern. Es können Objekte beliebigen Typs in einer Liste enthalten sein. Der erste Index ist die Null. Der letzte Index ist n-1.
Listen werden mit zwei Methoden erzeugt:
aList = List.Make
aList = { } ' Erzeugt eine leere Liste
aList = { 1,2,3,4} ' Erzeugt eine Liste mit vier Zahlen MsgBox.ListAsString (aList,"Liste","Caption")
Quellcode 7 Liste
Abbildung 5 Liste mit Zahlen
Methoden der Liste:
Add ( anObj ) : Fügt ein Element an das Ende der Liste Insert ( anObj ) Fügt ein Element an den Anfang der Liste Remove ( anIndexNumber ) Entfernt das Objekt am Index „anIndexNumber“
RemoveObj ( anObj ) Entfernt das Objekt „anObj“
Set ( anIndexNumber, anObj ) Überschreibt das anIndexNumber.te Objekt Sort ( ascending ) Sortiert die Liste.
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 18
Count : Number Anzahl der Elemente
Get ( anIndexNumber ) : Obj Gibt das anIndexNumber.te Objekt aus
Empty Löscht die Liste
Merge ( anotherCollection ) Fügt eine Liste in die Liste ein
Die nächsten drei Methoden suchen ein Objekt in einer Liste. Wurde das Objekt gefunden, so erhält man einen Index zwischen Null und N-1. Ist das Objekt nicht in der Liste, so erhält man den Wert –1.
Find ( anObj ) : Sucht ein Element.
FindByClass ( aClass ) Sucht ein Element.
FindByValue ( anObj ) Sucht ein Element.
2.6 If-Anweisung
Die Anweisung if…then…else kontrolliert die bedingte Ausführung von Einzelanweisungen und Blöcken. Sie kann beliebig tief verschachtelt sein.
Beispiel:
A = 3
If (A > 10) then A = A +10 end
MsgBox.Info(A.AsString,"Ergebnis A") Quellcode 8 Einfache If-Anweisung
Der Wert von A ist kleiner gleich zehn, so dass die If-Anweisung nicht ausgeführt wird.
A = 3
If (A > 10) then A = A +10 Else
A = A + 5 end
MsgBox.Info(A.AsString,"Ergebnis A") Quellcode 9 Einfache If-Then Anweisung
Der Wert von A ist kleiner gleich zehn, so dass der Else-Block ausgeführt wird. Das Ergebnis ist von A ist 8.
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 19
2.7 Schleifen
Als Schleifen verwendet Avenue zwei Sorten. Zum Einen die While Schleife und zum Anderen die For each-Schleife. Beide haben unterschiedliche Einsatzmöglichkeiten. Bei der While-Schleife ist die Anzahl der Durchgänge im Gegensatz zur For each-Schleife nicht bekannt.
2.7.1 While-Schleife
Die While-Schleife ist nach dem Muster in C und Java implementiert.
Beispiele:
X = 0 Summe = 0
while (x < 100) Summe = Summe + x x = x +1
end
MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )
Quellcode 10 While-Schleife
Das zweite Beispiel verwendet die Anweisung break um die Schleife zu verlassen. Möglich ist auch die Anweisung „Continue“, die sofort zum nächsten Schleifedurchgang wechselt.
while (true)
again = MsgBox.YesNo( "do it again", "DO IT", TRUE ) if (not again) then
break end end
Quellcode 11 While-Schleife mit einer break-Anweisung
2.7.2 For Each-Schleife
Die For-Schleife führt Anweisungen über die Elemente einer Collection aus. Diese kann explizit in der For-Schleife angegeben werden oder vorher ermittelt werden.
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 20
Beispiele:
X = 0 Summe = 0
For Each X IN 1..20 Summe = Summe + X end
MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )
Quellcode 12 Summenberechnung mit einer festen Grenze (For-Schleife)
N = kanal.readElt X = 0
Summe = 0
For Each X IN 1..N Summe = Summe + X end
MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )
Quellcode 13 Summenberechnung mit einer variablen Grenze (For-Schleife).
aList = { 1,3,5,7,9 } X = 0
Summe = 0
For Each X IN aList Summe = Summe + X end
MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )
Quellcode 14 Summenberechnung mit einer Liste (For-Schleife).
2.8 For Each Schleifen mit Schlüssenwort By Zusätzlich kann die Steuerung mittels „By“ eingeschränkt werden.
X = 0 Summe = 0
For Each X IN 1..10 by 2 Summe = Summe + X end
MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )
Quellcode 15 Summenberechnung mit einer variablen Grenze und einer Schrittweite
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 21
Im obigen Beispiel wird die Summe folgendermaßen ermittelt:
Summe = 1 + 3+ 5+ +7 + 9 = 25
N = kanal.readElt X = 0
Summe = 0
For Each X IN 1..N by 2 Summe = Summe + X end
MsgBox.Info( "Summe: "+Summe.AsString, "Ergebnis" )
Quellcode 16 Summenberechnung mit einer variablen Grenze und einer Schrittweite
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 22
3 Einfache Programmierung
3.1 Ausgabe mit der Klasse MsgBox
Für die Ausgabe stehen mehrere Methoden zur Verfügung.
Info ( aMsg, aTitle ) Ausgabe einer Meldung mit dem Info-Symbol Error ( aMsg, aTitle ) Ausgabe einer Meldung mit dem Error-Symbol
Warning ( aMsg, aTitle ) Ausgabe einer Meldung mit dem Ausrufezeichen-Symbol Report ( aLongMsg, aTitle ) Der Text wird in einem Editor angezeigt. Er kann also kopiert werden.
Beispiele:
Info:
MsgBox.Info("Betätigen Sie die Ok-Taste um Ihre Festplatte zu formatieren",
"Hinweis")
Quellcode 17 Info-Box
Abbildung 6 Beispiel für MsgBox.Info
Error:
MsgBox.Error("Betätigen Sie die Ok-Taste um Ihre Festplatte zu formatieren", "Hinweis")
Quellcode 18 Error-Box
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 23
Abbildung 7 Beispiel einer MsgBox.Error
Warning:
MsgBox.Warning("Betätigen Sie die Ok-Taste um Ihre Festplatte zu formatieren", "Hinweis")
Quellcode 19 Warning-Box
Abbildung 8 Beispiel einer MsgBox.Warning
Report:
sStr = ""
for each i in 1..10
sStr = sStr+i.AsString+NL end
MsgBox.Report(sStr, "Hinweis") Quellcode 20 Report-Box
In einer ReportBox wird ein String in einem Editor dargestellt. Dieses ist nützlich, wenn der Anwender die Möglichkeit haben sollte, die Ausgabe über die Zwischenablage weiter verwenden zu können.
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 24
Abbildung 9 Ausgabe einer Report-Box
3.2 Eingabe mit der MsgBox
Als Eingaben fungieren folgende Dialogfenster:
3.2.1 Ja/Nein-Abfragen:
AllYesNo ( aMsg, aTitle, defaultIsYes ) : Obj LongYesNo ( aMsg, aTitle, defaultIsYes ) : Boolean MiniYesNo ( aMsg, defaultIsYes ) : Boolean YesNo ( aMsg, aTitle, defaultIsYes ) : Boolean YesNoCancel ( aMsg, aTitle, defaultIsYes ) : Obj
Als Ergebnis liefert diese Methode die Werte (true,false,nil)
SaveChanges ( aMsg, aTitle, defaultIsYes ) : Obj (Ja/Nein/Abbrechen) Als Ergebnis liefert diese Methode die Werte (true,false,nil)
3.2.2 Auswahl aus einer Liste
Folgende Listen stehen zur Auswahl:
Choice ( aList, aMsg, aTitle ) : Obj ComboBox
ChoiceAsString ( aList, aMsg, aTitle ) : Obj ComboBox List ( aList, aMsg, aTitle ) : Obj Normale Liste ListAsString ( aList, aMsg, aTitle ) : Obj Normale Liste
MultiList ( aList, aMsg, aTitle ) : List Normale Liste, Mehrfache Selektion MultiListAsString ( aList, aMsg, aTitle ) : List Normale Liste, Mehrfache Selektion
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 25
Beispiele:
' Verweis auf das aktuelle Dokument (View, Table etc) theView = av.GetActiveDoc
aList = list.make ' Neue Liste
for each aTheme IN theView.GetThemes
aList.add(aTheme.AsString) ' Einfügen der Themen als String end
' Anzeige der Themen in einer Liste
aTheme = MsgBox.ListAsString (aList, "Anzeige alle Themen","Liste") if (aTheme=nil) then
exit end
Quellcode 21 Liste aller Themen
Das Beispiel zeigt die Anzeige aller Themen im aktuellen View. Der aktuelle View wird mit der Anweisung „theView = av.GetActiveDoc“ aus dem Projekt geholt. In der For-Schleife werden dann alle Themen in die Liste eingetragen. Mit Hilfe der Methode ListAsString werden die Themen angezeigt.
3.2.3 Eingabe eines Textes
Für die Eingabe eines oder mehrere Texte stehen weitere Methoden zur Verfügung.
Input-Methode:
Die Input-Methode erlaubt die Eingabe eines einzelnen String. Im nächsten Beispiel wird ein Name eingeben. Wenn der Anwender den Ok-Schalter gedrückt hat, wird die Eingabe zur Kontrolle noch einmal ausgegeben.
sStr = MsgBox.Input ("Bitte geben Sie Ihren Namen ein", "Testeingabe",
"noname")
if ( sStr<> nil) then
MsgBox.info(sStr,"Kontrollausgabe") end
Quellcode 22 Input-Box
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 26
Abbildung 10 Beispiel einer Eingabezeile
Multi-Input-Methode:
Die Multi-Input-Methode erlaubt die Eingabe von mehreren String. Im nächsten Beispiel wird eine Bestellung entgegengenommen. Wenn der Anwender den Ok-Schalter gedrückt hat, wird die Eingabe zur Kontrolle noch einmal ausgegeben.
' Erste Liste mit den Labels
labels = { "Katalog number", "Größe", "Farbe", "Preis" }
' Zweite Liste mit den Defaultwerten
defaults = { "2Y4445G", "4", "rot", "24.99" }
' Aufruf der Eingabe
order = MsgBox.MultiInput( "Ihre Angaben", "Bestellung", labels, defaults ) ' Erneute Ausgabe
if (order.count >0) then
MsgBox.ListAsString( order, "Ihr Auftrag ist registriert", "Meldung" ) End
sErg1 = order.get(0) sErg2 = order.get(1) sErg3 = order.get(2) sErg4 = order.get(3)
Quellcode 23 Multi-InputBox
Ergebnis des Dialogfensters:
Abbildung 11 Beispiel einer MultiInput-Eingabe
Der Aufruf der MultiInput.Methode ist einfach zu implementieren, hat aber folgende Nachteile:
• Aussehen relativ starr
• Keine Plausibilität innerhalb des Fensters
• Keine Unterscheidung in den Eingabetypen (Hilfe durch ComboBox etc.)
• Keine Unterstützung durch eine Online-Hilfe
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 27
Hinweis:
Da das Ergebnis immer eine Liste ist, muss mit Hilfe der Anzahl der Elemente in der Liste geprüft werden, ob der Anwender die Ok-Taste gedrückt hat.
Password-Methode:
Die Password-Methode erlaubt die Eingabe eines Textes
sStr = MsgBox.Password if ( sStr<> nil) then
MsgBox.info(sStr,"Kontrollausgabe") end
Quellcode 24 Password-Eingabe
Ergebnis:
Abbildung 12 Paßwort-Eingabe
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 28
4 Verknüpfung
Hat man Scripte programmiert, so kann man sie auch die das Menü „SCRIPTE|Ausführen“ starten.
Einige Scripte können aber nicht starten, da sie als aktives Dokument einen View oder eine Table erwarten. Dazu ist man gezwungen, diese aus der jeweiligen Umgebung zu starten. ArcView bietet dazu die Möglichkeit, Scripte mittels eines Menüeintrags oder eines Schalters zu starten. Dieses Kapitel zeigt die verschiedenen Möglichkeiten.
4.1 Scripttypen
ArcView unterscheidet zwei verschiedene Arten von Scripten:
♦ Scripte die eine Aktion auslösen ohne das der Anwender weitere Eingaben tätigen muss. Diese Scripte können durch Menüeinträge oder durch Schalter auf der Schalterleiste aufgerufen werden.
♦ Scripte, die mehrere Aktionen erfordern. Dies ist z. B. das Zeichnen einer Linie in einem Shape.
Diese Aktionen können nur von Schaltern aus dem Toolmenü aufgerufen werden.
Abbildung 13 Schalterleiste vs. Toolleiste
In Abbildung 13 sind die verschiedenen Komponenten dargestellt. Neu ist das Menü „Testmenü“. Es beinhaltet verschiedene Einträge. Darunter ist die Schalterleiste positioniert. Jeder Schalter hat nur jeweils ein Script, mit dem er verknüpft ist. Dieses kann trotzdem umfangreich sein. Ein Beispiel ist das Speichern der Änderungen oder das Aufrufen der Tabelle eines Shapes. Die Zeile beherbergt die Toolleiste von ArcView.
Die Schalter auf der Toolleiste besitzen drei Scripte pro Schalter.
1) Script, wenn der Schalter angeklickt wird (Click).
2) Script, wenn im View die linke Maustaste geklickt wird (Apply).
3) Script, wenn die Funktion beendet wird (Update).
Zusätzlich können Schalter in der Toolleiste auch in Toolmenü zusammengefasst werden. Dies spart Platz, da man immer so programmieren sollte, das der Anwender auch noch andere Extension laden kann.
4.2 Namensgebung
Als Entwickler sollte man immer daran denken, das der Anwender weitere Extensions geladen hat.
Um keine Namenskonflikte zu forcieren, ist ein Präfix beim Namen sinnvoll.
Beispiel:
Inhalt des Skriptes: Alle Bilder sichtbar machen
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 29
Name des Skriptes: AllPictureVisible
Präfix: HSHarz
Ort des Skriptes: View
Typ des Skriptes: Schalter (Bn) Damit ergibt sich folgende Bezeichnung:
Préfix Ort des Scriptes Typ des Scriptes Name des Scriptes
HSHarz. View Bn AllPictureVisible
Bzw. HSHarz.ViewBnAllPictureVisible
Mit dieser Namensgebung erkennt man sofort die „Firma“ bzw. die Extension, das Modul (View, Table, Layout), den Typ der Auslösung (Menü, Schalter) und den Zweck.
4.3 Verknüpfung eines Skriptes mit einem Menü
Dieses Kapitel zeigt die Verknüpfung mit einem Script in einem Menü. Als erstes wird das Menü erzeugt und dann automatisch das
Als erstes wechselt man in den gewünschten View und klickt doppelt in einer der Leisten (siehe Abbildung 14). Im Typ definiert man das gewünschte Modul (View, Table etc).
Abbildung 14 Dialogfenster der Menüs und Schalter
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 30
In der Kategorie wählt man den Ort für die Verknüpfung aus (z. B. Menüs). Mit dem Schalter „Neues Menü“ erzeugt man ein neues Menü an der aktuellen Position. Die Einträge im Menü werden mit den Schaltern „Neues Element“ und „Trennzeichen“ erzeugt.
Für jedes Menü sind folgende Einträge verfügbar:
Click: Script, welches beim Anklicken aufgerufen wird Disabled: Deaktiviert den Menüeintrag
Help Zeigt diesen Text in der Statuszeile an. Dient zur weiteren Information des Anwenders
Help Topic Begriff für die Online-Hilfe
Invisible Zeigt an, ob das Menü angezeigt wird. Besser ist es, das Menü mit Hilfe der Eigenschaft „Disabled“ zu deaktivieren.
Label Überschrift
Shortcut Kurzbefehl, sollte vorsichtig benutzt werden
Tag Integernummer
Update Script, welches beim Neuzeichnen des Views aufgerufen wird
Abbildung 15 Neues Menü
Scriptzuweisung:
Mit einem Doppelklick in der Zeile „Click“ erscheint ein Dialogfenster für die Zuweisung des Menüeintrags an ein Script (siehe Abbildung 16). Wenn das Script schon existiert, sucht man dieses aus der Liste. Ein neues erzeugt man mit dem Schalter „Neu“. Die Abbildung 17 zeigt das Dialogfenster. Hier muss man den kompletten Namen eintragen. Das Skript wird danach in einem Editor angezeigt. Es ist sinnvoll, in der ersten Zeile als Kommentar den Namen einzutragen. Das erleichtert die weitere Pflege der Scripte (siehe 93).
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 31
Abbildung 16 Script-Manager
Die nächste Abbildung zeigt die Eingabe für ein neues Script.
Abbildung 17 Scriptname eintragen
4.4 Verknüpfung eines Skriptes mit dem ButtonBar
Die Vorgehensweise ist mit der Verknüpfung für ein Menü fast identisch. Statt des Menüeintrags wird hier ein Schaltersymbol ausgewählt. Ein Doppelklick auf die Zeile „Icon“ öffnet das Dialogfenster für die Bestimmung der Symbole. Die Liste in ArcView umfasst diverse Symbole, aus denen man auswählen kann (siehe Abbildung 18). Es besteht aber auch die Möglichkeit, eigene Symbole in ArcView zu laden. Dazu betätigt man den Schalter „Laden“ (siehe Abbildung 19).
Abbildung 18 Symbol-Manager
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 32
Abbildung 19 Laden eines eigenen Symbols
Es können verschiedene Formate verwendet werden:
• Gif-Bilder
• MCP-Bilder
• RS-Bilder
• TIF-Bilder
• BMP-Bilder
• XBMP-Bilder
Mit einem Bildeditor kann man eigene Symbole erzeugen.
4.5 Verknüpfung eines Skriptes mit der Werkzeugleiste
Die Vorgehensweise ist mit der Verknüpfung für einen Schalter identisch. Ergänzt wird hier noch die Möglichkeit mehrere Schalter in einem Werkzeugmenü (Toolmenü) zu gruppieren. Dazu existiert im Dialogfenster der Schalter „Werkzeugmenü“. Ein Doppelklick auf die Zeile „Icon“, öffnet das Dialogfenster für die Bestimmung der Symbole. Die Liste in ArcView umfasst diverse Symbole, aus denen man auswählen kann (siehe Abbildung 18). Es besteht aber auch die Möglichkeit, eigene Symbole in ArcView zu laden. Dazu betätigt man den Schalter „Laden“ (siehe Abbildung 19).
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 33
Abbildung 20 Schalter in der Werkzeugleiste
Die nächste Abbildung zeigt das Dialogfenster, nachdem man ein neues Werkzeugmenü erzeugt hat.
Der „Cursor“ zeigt das Menü an. Mit dem Schalter „Werkzeug“ erzeugt man die gewünschten Schalter.
Abbildung 21 Erzeugen eines neuen Werkzeugmenüs
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 34
Links vom aktuellen Schalter sind mehrere Werkzeugmenü eingetragen. Zu sehen sind die zusätzlichen Einträge für die drei Scripte:
Apply Click Update
Die Verknüpfungen mit dem Apply-Event und dem Klick-Event sind absolut notwendig.
Klick-Script: Diese Script wird aufgerufen, wenn der Anwender den Schalter betätigt. Meistens wird hier
Die Schalter auf der Toolleiste besitzen drei Scripte pro Schalter.
1) Script, wenn der Schalter angeklickt wird (Click).
2) Script, wenn im View die linke Maustaste geklickt wird (Apply).
3) Script, wenn die Funktion beendet wird (Update).
Beispiel Click-Script:
if ((av.GetSymbolWin.GetPanel = #SYMBOLWIN_PANEL_COLOR).not) then av.GetSymbolWin.SetPanel(#SYMBOLWIN_PANEL_PEN)
end
Quellcode 25 Click-Script
Beispiel Apply-Script:
theView = av.GetActiveDoc l = theView.ReturnUserLine
if (l.IsNull) then return nil
else
gl = GraphicShape.Make(l.AsPolyline) theView.GetGraphics.UnselectAll gl.SetSelected(TRUE)
theView.GetGraphics.Add(gl) av.GetProject.SetModified(true) end
Quellcode 26 Click-Script
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 35
Beispiel Update-Script:
theView = av.GetActiveDoc
theTheme = theView.GetEditableTheme
if (theTheme = nil) then SELF.SetEnabled(TRUE) else
SELF.SetEnabled(FALSE) end
Quellcode 27 Update-Script
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 36
5 Dateiein- und Ausgabe
5.1 Dateidialoge
Die Dateiein- und Ausgabe wird mittels der Klasse “FileDialog“ programmiert. Folgende Methoden stehen zur Verfügung:
• Put ( defaultFileName, aPattern, FileWinTitle ) : FileName
• ReturnFiles ( Patterns, Labels, aTitle, defaultPatternIndex ) : List
• Show ( aPattern, aPatternLabel, FileTitle ) : FileName
• Mit „Put“ kann eine Datei speichern.
• Mit „ReturnFiles“ kann man als Anwender mehrere Dateien auswählen, die dann mittels Liste in Avenue abgefragt werden können.
• Mit „Show“ kann man eine existierende Datei auswählen
5.1.1 Auswahl einer Datei zum Speichern
Mit dem folgendem Code wählt man eine Datei aus. Das Startverzeichnis ist das Temp-Verzeichnis.
' Erstellen einer Temporären Datei
aFilename = FileName.Make("$HOME").MakeTmp("shape","shp")
aFilenameNew = FileDialog.Put(aFilename,"*.shp","Ausgabe Shape Datei" ) if (aFilenameNew = nil) then
exit end
aFilenameNew.SetExtension("shp")
Msgbox.Info("Eingabedatei: "+ aFilenameNew.asString,"Auswahl")
5.1.2 Auswahl einer Datei zum Laden
Mit dem folgendem Code wählt man eine Datei aus. Das Startverzeichnis ist das Temp-Verzeichnis.
' Erstellen einer Temporären Datei
aFilenameInput = FileName.Make("$HOME").MakeTmp("shape","shp") aFilenameInput = FileDialog.Show(aFilenameInput.asString, "*.txt","Import einer Datei" )
if (aFilenameInput = nil) then exit
end
Msgbox.Info("Eingabedatei: "+ aFilenameInput.asString,"Auswahl")
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 37
5.2 Schreiben und Lesen einer Datei
Befehle:
Öffnen einer Datei:
FHandle = LineFile.Make(theFile, #FILE_PERM_READ) Lesen einer Zeile:
sAnz = FHandle.ReadElt ' hier noch als String Lesen mehrerer Zeilen in einer Liste:
FHandle.Read ( aLineList, numLines ) Schreiben einer Zeile:
FHandle.WriteElt(Anz.asString) Schreiben mehrerer Zeilen in einer Liste:
FHandleWrite ( aLineList, numLines ) Dateikanal schließen:
FHandle.close
' Lesen einer kompletten Datei sFilename = "C:\daten\test.ave"
FHandle = TextFile.Make( sFilename.AsFileName, #FILE_PERM_READ ) sStr = FHandle.Read( FHandle.GetSize )
FHandle.Close
msgbox.report(sStr,"Inhalt der Datei: "+sFilename)
Dieses Beispiel benutzt einen Dialog zur Auswahl
aFilenameInput = FileDialog.Show("*.ave", "*.ave","Import einer Datei" ) if (aFilenameInput = nil) then
exit end
FHandle = TextFile.Make(aFilenameInput, #FILE_PERM_READ ) sStr = FHandle.Read( FHandle.GetSize )
FHandle.Close
msgbox.report(sStr,"Inhalt der Datei: "+aFilenameInput.asString)
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 38
Dieses Beispiel benutzt einen Dialog mit mehreren Dateitypen zur Auswahl
Patterns = { "Textdatei (*.txt)", "Avenue Source (*.ave)", "Temporäre Dateien (*.tmp)" }
Labels= { "*.txt", "*.ave", "*.tmp"}
FilenameList = Filedialog.ReturnFiles ( Labels, Patterns, "Import von Dateien", 1)
' Das Ergebnis ist immer ein Objekt, nicht nil ! if (FilenameList.count=0) then
exit end
sStrMain=""
for each aFile in FilenameList
FHandle = TextFile.Make(aFile, #FILE_PERM_READ ) sStr = FHandle.Read( FHandle.GetSize )
FHandle.Close
sStrMain=sStrMain+"Dateiname: "+aFile.asString+NL+
"Inhalt:"+NL+sStr+NL+NL end
msgbox.report(sStrMain,"Inhalt der Dateien")
5.3 Beispiel für die Auswahl einer Datei und das Lesen Öffnen einer Datei und lesen der n-Zeilen in eine Liste.
Verwendet die Variable „Arbeitsverzeichnis. Wenn diese nicht gesetzt ist, theView = av.GetActiveDoc
' Holen des definierten Arbeitsverzeichnisses sPath = av.GetProject.GetWorkDir.AsString
' im Normalfall steht $Home, dann ist es das temporäre Verzeichnis if (sPath="$HOME") then
msgBox.info("Bitte geben Sie ein gültiges Arbeitsverzeichni sein", "Hinweis")
theProject = av.GetProject
newDir = MsgBox.Input( "Geben Sie ein neues Arbeitsverzeichnis an.", "Arbeitsverzeichnis", theProject.GetWorkDir.GetFullName)
if (newDir = nil) then return nil
elseif (newDir.AsFileName.IsDir.Not) then
MsgBox.Error( newDir.AsFileName.GetFullName++
"ist kein Verzeichnis", "")
elseif (File.IsWritable(newDir.AsFileName).Not) then MsgBox.Error( newDir.AsFileName.GetFullName+
+"ist schreibgeschützt", "")
Hochschule Harz - Wernigerode Programmieren in Avenue FB Automatisierung und Informatik © 2003,2008 Wahlpflichtveranstaltung
Dipl.-Inf., Dipl.-Ing. (FH) M. Wilhelm 39
else
theProject.SetWorkDir( newDir.AsFileName ) end
exit ' eventuell auskommentieren end
sExt = "*.srt"
' Hier der Aufruf des Openfile-Dialogs theFile = FileDialog.Show(sExt,
"Sortierungs-Dateien",
"Laden einer Sortierungs-Dateien aus Themen") if (theFile = nil) then
exit ‘ Abbruch end
' Nun lesen die Anzahl der Einträge
FKan = LineFile.Make(theFile, #FILE_PERM_READ) sAnz = FKan.ReadElt ' hier noch als String
if (sAnz.isNumber.not) then
MsgBox.Info("Fehlerhafter Wert in der Anzahl der Themen","Fehler") exit
end
Anz = sAnz.asNumber ' hier die eigentliche Umwandlung Text -> Integer
liste = list.Make ' neue leere Liste for each i in 1..Anz
sThema = FKan.ReadElt ' Zeilenweise lesen liste.add(sThema) ' zur Liste hinzufügen end
FKan.close ' Dateikanal schließen
5.4 Beispiel Speichern aller sichtbaren Themen
theView = av.GetActiveDoc
' Holen des definierten Arbeitsverzeichnisses sPath = av.GetProject.GetWorkDir.AsString
' im Normal steht $Home, dann tempöräre Verzeichnis if (sPath="$HOME") then
msgBox.info("Bitte geben Sie ein gültiges Arbeitsverzeichni sein","Hinweis")
theProject = av.GetProject
newDir = MsgBox.Input( "Geben Sie ein neues Arbeitsverzeichnis an.",
"Arbeitsverzeichnis", theProject.GetWorkDir.GetFullName) if (newDir = nil) then
return nil
elseif (newDir.AsFileName.IsDir.Not) then