Visual Basic

Transcrição

Visual Basic
Dateiverarbeitung (1)
Anwendungsprogramm
Bibliotheken und
Funktionen der
Ausführungsplattform
Betriebssystem
Dateisystem
Platten-Controller
Anwendung liest, verarbeitet und
speichert Daten
Pufferung, Zusatzfunktionen wie z.B. Dialoge
zum Auswählen einer Datei
Betriebssystem stellt einheitliche
Schnittstelle zu Dateisystemen bereit
Dateisystem realisiert lineare Blockadressierung,
Verzeichnisse, Zugriffsrechte u. mehr
Daten werden durch Dateisystem
auf ein block-orientiertes Gerät
abgebildet
Gerätetreiber und Plattencontroller
sprechen Platten und dort jeweils
Blöcke (Zylinder, Sektor, Kopf) an.
Peter Sobe
57
Dateiverarbeitung (2)
Eine Datei ist ein benannter Bereich (mit Dateinamen und
Zusatzinformationen) in den Daten geschrieben werden können.
 Daten werden innerhalb einer Datei auf nummerierten
Blockadressen abgelegt, beim aufeinanderfolgenden Schreiben
wird die Blockadresse automatisch erhöht (Datei-Zeiger)
 Daten können innerhalb einer Datei adressiert werden (Setzen
des Dateizeigers)
 Daten können nacheinander aus einer Datei gelesen werden,
Adresse wird automatisch erhöht.
 Eine Datei kann vergrößert werden, wenn zusätzliche Daten
geschrieben werden.
 Dateiinhalte können überschrieben werden.
 Eine Datei kann verkleinert werden.
 Vor dem Schreiben und Lesen muss eine Datei geöffnet werden.
 Sind alle Dateioperationen abgeschlossen, wird die Datei
geschlossen
Peter Sobe
58
Dateiverarbeitung (3)
Vor den Zugriff muss eine Datei geöffnet werden. Es können
mehrere Dateien gleichzeitig geöffnet sein.
Öffnen einer Datei (Open):
FileOpen(1,“meinedaten.txt“, OpenMode.Input )
Nach Open kann auf eine Datei über die angebene Nummer (hier 1)
zugegriffen werden.
Allgemeine Form
FileOpen(filenr As Integer, filename As String, Mode As
Microsoft.VisualBasic.OpenMode)
Schliessen der Datei (Close)
FileClose(1)
Allgemeine Form:
FileClose(filenr As Integer)
Peter Sobe
59
Dateiverarbeitung (4)
Zugriffsfunktionen für Textdateien
Input-Funktionen:
ziel = LineInput ( filenr)
Liest eine Zeile aus der mit filenr angegebenen Datei bis zum nächst
folgenden Zeilenumbruch. Die gelesenen Zeichen werden der
angegebenen Variablen zugewiesen (Variable muss von Typ Variant
oder String sein).
Allgemeine Form:
LineInput(filenr As Integer) As String
zeile = InputString(filenr, 20)
Liest eine festgelegte Anzahl Zeichen aus der Datei (hier 20)
Allgemeine Form:
InputString(filenr As Integer, count As Integer) As String
Peter Sobe
60
Dateiverarbeitung (5)
Mittels EOF(filenr) wird getestet, ob das Dateiende schon erreicht ist.
Allgemeine Form:
EOF(filenr As Integer) As Boolean
Schreiben in eine geöffnete Textdatei mittels PrintLine
Dim textzeile As String = “Der grüne Frosch springt vom Blatt.“
PrintLine(13, textzeile)
Allgemeine Form:
PrintLine(filenr As Integer, ParamArray Output() As Object)
Peter Sobe
61
Dateiverarbeitung (6)
Beispiel:
Dim zeile As String
FileOpen(12,“eingabe.txt“,OpenMode.Input)
FileOpen(13,“ausgabe.txt“,OpenMode.Output)
While (Not EOF(12))
zeile=LineInput(12)
PrintLine(13,zeile)
End While
FileClose(12)
FileClose(13)
Peter Sobe
62
Dateiverarbeitung (7)
Das Unterprogramm Print erlaubt eine formatierte Ausgabe mehrerer
Werte in eine Datei.
Beispiel: Schreiben einer Textdatei in Visual Studio 2010:
FileOpen(1, "C:\TEMP\vbadatei.txt", OpenMode.Output)
Print(1, "Peter Sobe", 99, vbCrLf)
Print(1, "Max Meier", 103)
FileClose(1)
Allgemeine Form:
Print(filenr As Integer, ParamArray Output() As Object)
Peter Sobe
63
Dateiverarbeitung (8)
Binärer Zugriff: Daten werden in ihrem internen Darstellungsformat in
Datei geschrieben, bzw. aus ihnen gelesen.
Wie üblich werden Dateien vor allen Zugriffen mit Open geöffnet und am
Schluss mit Close geschlossen.
FileOpen(3, "C:\TEMP\bindatei.bin", OpenMode.Binary, OpenMode.Output)
Operationen:
FileGet(filenr, variable, [Recordnr oder Bytepostion])
Lesen von einer Datei auf eine Variable. As Variable können alle Typen,
außer Objekte und Felder angegeben werden.
Wird Recordnr, Byteposition nicht angegeben, wird vom aktuellen
Dateizeiger beginnend gelesen
FilePut(filenr, variable, [Recordnr oder Bytepostion])
Schreiben auf Datei. Parameter wie Get.
Peter Sobe
64
Dateiverarbeitung (9)
Operationen für binären Zugriff (Fortsetzung):
curr_pos = Loc ( filenr)
Loc() gibt die aktuelle Position des Dateizeigers zurück. An dieser
Postion startet die nächste Zugriffsoperation.
Seek (filenr) gibt ebenfalls die aktuelle Position des Dateizeigers
zurück.
curr_pos = Seek ( filenr)
Setzen des Dateizeigers, wenn Byteposition als zweiter Parameter
angegeben wird. Zum Beispiel:
Seek ( filenr, curr_pos+42)
Peter Sobe
65
Dateiverarbeitung (10)
Durch Importieren des System.IO Namensraum, können vorab
bereitgestellte Klassen zum Umgang mit Dateien benutzt werden.
Imports System.IO
Beispiel:
Dim binReader As New BinaryReader( _
File.Open(fileName, FileMode.Open))
…
binReader.BaseStream.Seek(0, SeekOrigin.Begin)
MeasuredValue = binReader.ReadSingle()
Position = binReader.ReadString()
TimeValue = binReader.ReadInt32()
Peter Sobe
66
Klassen und Objekte (1)
Begriffe
Objekt – Objekte definieren sich über Eigenschaften und auf sie
anwendbare Methoden. Für grafische Elemente einer Anwendung,
stehen Objekte bereit. Das ermöglicht z.B. das Auslesen von Werten
aus Eingabefeldern:
Dim Value As Integer
Value = Val(TextBox1.Text)
Eigenschaften – definieren Zustände eines Objekts. Eigenschaften
können gelesen oder gesetzt werden. Alle Eigenschaften zusammen
ergeben den Zustand des Objekts.
Methoden – Unterprogramme, die an einen Objekt-Typ gebunden
sind und den Objektzustand ändern können
Peter Sobe
67
Klassen und Objekte (2)
Sicht auf ein Objekt:
Verhalten (über Methoden)
Zustand
(Werte aller objekt-lokalen
Variablen)
Klasse:
 Softwarekonstruktion, die ein Objekt mit seinen Methoden und
Variablen definiert.
 Wird oft auch als Objekttyp bezeichnet.
Vergleichbar mit Struktur-Typ und daraus deklarierten Variablen
 Man erhält ein Objekt, indem man eine Klasse instanziiert, d.h.
eine Instanz einer Klasse bildet
Peter Sobe
68
Klassen und Objekte (3)
Zugriff auf Eigenschaften und Methoden:
Name des Objekts, gefolgt von einem Punkt (.) und danach der
Name der Eigenschaft oder der Methode
Beispiele (aus Forms-Projekten):
t1 = TagBox1.Text
DifferenzBox.Text = diff
Me.Close() REM das ist ein Methodenaufruf des Objekts Me
Me verweist immer auf das Formular, dessen Programmcode gerade
ausgeführt wird.
Peter Sobe
69
Ziele der Objektorientierung (1)
Es sollen kurz die Hauptziele angegeben werden, die
objektorientierte Sprachen charakterisieren:
Datenabstraktion: Definition und Verwendung anwendungsbezogener Datentypen und der auf ihnen möglichen Operationen
(Methoden und Operatoren).
Datenkapselung: Vereinbarung von Daten und zugeordneten
Prozeduren (Methoden), die diese Daten verwalten, in einer
Programmeinheit.
Zugriffe auf Daten und die Benutzung der Methoden können über
Zugriffsspezifizierer einschränkt werden. Oft sind die
Datenelemente eines Objektes vollständig gekapselt (private) und
für den Nutzer nicht einsehbar. Nur über die öffentlichen Methoden
(public) kann der Nutzer das Objekt manipulieren.
R. Grossmann / P. Sobe
70
Ziele der Objektorientierung (2)
Trennung von Implementierung und Schnittstelle:
Durch die Datenkapselung wird es möglich, dass der
Programmierer Freiheiten bei der internen Realsisierung der
Klassen hat.
Er ist nur an die Schnittstelle und die äußere Wirkung der
Methoden gebunden. Der Nutzer der Klasse benötigt in seinem
Programm ausschließlich die Schnittstelle, die durch die Methoden
bestimmt wird.
Damit ist ein Anwendungsprogramm vollkommen unabhängig von
konkreten internen Realisierungen der Klassen.
R. Grossmann / P. Sobe
71
Ziele der Objektorientierung (3)
Spezialisierung und Generalisierung (Vererbung):
Durch das Prinzip der Spezialisierung wird es möglich, aus einer
Basisklasse eine weitere Klassen abzuleiten, die viele
Gemeinsamkeiten mit ersterer haben und nur in einigen Details
abweichen. Eine abgeleitete Klasse erbt die Datenstruktur und
vererbbare Elementfunktionen von der Basisklasse. Es müssen
folglich nur die Abweichungen (Spezialisierung) neu programmiert
werden. Das vermindert den Kodierungsaufwand, eliminiert
mehrfachen ähnlichen Code und senkt die mögliche Fehlerquote.
Polymorphismus: In Klassenhierarchien mit Vererbung kann
dieselbe Methode für Objekte unterschiedlicher Typen
unterschiedliche Aktionen auslösen.
R. Grossmann / P. Sobe
72
Benutzerdefinierte Objekte (1)
Benutzerdefinierte Objekte definieren:
Public Class Fahrzeug
Dim v, vmax, leermasse, nutzmasse As Integer
Dim Bezeichnung As String
Sub New (ByVal bez as String, ByVal vm as Integer, ByVal lm As Integer)
Bezeichnung = bez
vmax=vm
leermasse = lm
End Sub
Function ausgabe() As String
ausgabe = Bezeichnung + “ mit Geschwindigkeit: " + Format(v)
End Function
…
Beispiel angelehnt an:
http://openbook.galileocomputing.de/einstieg_vb_2010
Peter Sobe
73
Benutzerdefinierte Objekte (2)
Benutzerdefinierte Objekte definieren (Fortsetzung):
…
Sub beschleunigen(ByVal wert As Integer)
v = v + wert
if v>xmax Then v=vmax
End Sub
Sub bremsen(ByVal wert As Integer)
v = v - wert
if v<0 Then v=0
End Sub
End Class
Beispiel angelehnt an:
http://openbook.galileocomputing.de/einstieg_vb_2010
Peter Sobe
74
Benutzerdefinierte Objekte (3)
Benutzerdefinierte Objekte instanziieren:
Dim stadtrad,rennrad As fahrzeug
stadtrad = New fahrzeug(“Stadtrad“, 30, 15)
REM hier mal ein träges Fahrrad, mit vmax=30 Km/h und 15 Kg
rennrad = new fahrzeug(“Wettkampfrad“, 55, 8)
REM ein leichteres und schnelleres Rad
Dim kleinwagen As New fahrzeug(“Fiat Topolino“,80, 650)
REM Deklaration und Instanziierung in einem Schritt
Peter Sobe
75
Benutzerdefinierte Objekte (4)
Benutzerdefinierte Objekte benutzen:
stadtrad.beschleunigen(10)
rennrad.beschleunigen(25)
stadtrad.bremsen(10)
…
kleinwagen.beschleunigen(50)
rennrad.beschleunigen(20)
…
kleinwagen.bremsen(25)
…
Am Ende sind Objekte freizugeben
stadtrad = Nothing
rennrad = Nothing
Peter Sobe
76
Dateizugriff in Visual Basic 2010
Klasse StreamReader mit Methode ReadLine
Imports System.IO
Dim fs As FileStream
Dim sr As StreamReader
Dim dateiname As String = “meineDatei.txt"
Dim zeile As String
If Not File.Exists(dateiname) Then
MessageBox("Dateiexistiert nicht")
Else
fs = New FileStream(dateiname, FileMode.Open)
sr = New StreamReader(fs)
Do Until sr.Peek() = –1
zeile = sr.ReadLine()
Textstring &= zeile & vbCrLf
Loop
sr.Close()
Peter Sobe
77
Dateizugriff in Visual Basic 2010
Klasse StreamReader mit Methode WriteLine
Imports System.IO
Dim fs As FileStream
Dim sw As StreamWriter
Dim dateiname As String = "C:\Tmp\aus.txt"
Try
fs = New FileStream( dateiname, FileMode.Create)
sw = New StreamWriter(fs)
sw.WriteLine(EingabeText) ‘vorausgesetzt EingabeText wurde vorab
‘vom Programm mit Inhalt versehen
sw.Close()
Catch ex As Exception
MessageBox(ex.Message)
End Try
Beispiele angelehnt an: Einstieg in Visual Basic 2010 von Thomas Theis, Galileo Computing
Peter Sobe
78
Interoperabilität mit Office-Anwendungen (1)
Durch .NET Programme (z.B. Visual Basic) können Microsoft-OfficeAnwendungen automatisiert werden.
Diese Technik basiert auf den s.g. Interop-Assemblys – das sind
Sammlungen von Funktionen und Objekten, die gemeinsam durch
verschiedene auf der .NET Plattform ausgeführten Anwendungen
benutzt werden können.
Installierte Assemblys sind gelistet unter C:\Windows\assembly
Peter Sobe
79
Interoperabilität mit Office-Anwendungen (2)
Assemblys, verwaltet von der CLR
Assembly
Manifest
Modul
Metadaten
Code Intermediate Language
Typ (Klasse, Struktur)
Eigenschaften
Methoden
Felder
Peter Sobe
80
Interoperabilität mit Office-Anwendungen (3)
Ein Beispiel für MS-Excel Automatisierung findet man unter
http://microsoft.com/kb/301982
In Visual Studio unter Projekt:
• Verweis hinzufügen
• .NET Plattform auswählen
• Assembly Microsoft.Office.Interop.Excel auswählen
Peter Sobe
81
Interoperabilität mit Office-Anwendungen (4)
Imports Microsoft.Office.Interop
Dim oXL As Excel.Application
Dim oWB As Excel.Workbook
Dim oSheet As Excel.Worksheet
oXL = CreateObject("Excel.Application")
oWB = oXL.Workbooks.Add
oSheet = oWB.ActiveSheet
oSheet.Cells(1, 1).Value = "Artikel"
oSheet.Cells(1, 2).Value = "Menge"
oSheet.Cells(1, 3).Value = "Gewicht"
oSheet.Cells(1, 4).Value = "Preis“
Nach Art dieses Beispiels können z.B. Berechnungsdaten als Tabelle
ausgegeben werden und danach Diagramme erstellt werden.
Peter Sobe
82
Interoperabilität mit Office-Anwendungen (5)
Imports Microsoft.Office.Interop
Dim
Dim
Dim
Dim
Dim
oXL As Excel.Application
oWB As Excel.Workbook
oSheet As Excel.Worksheet
oRng As Excel.Range
eingabe As String
MsgBox("Geben Sie jetzt in F2 etwas ein!")
eingabe = oSheet.Range("F2").Value
Display.Text = eingabe
Peter Sobe
83
Interoperabilität mit Office-Anwendungen (6)
Bei den bisherigen Beispielen wurde eine neue Excel-Tabelle erzeugt. Der
Nutzer kann diese unter einem neuen Dateinamen speichern.
Auch das Öffnen bereits existierender Dokumente ist möglich:
Const NVAL As Integer = 20
Dim eingabe(NVAL) As Single
Dim oXL As Excel.Application
Dim oWB As Excel.Workbook
Dim oSheet As Excel.Worksheet
oXL = CreateObject("Excel.Application")
oWB = oXL.Workbooks.Open(“C:\usr\tabellen\experimente.xls“)
oSheet = oWB.ActiveSheet
REM Einlesen der Spalte (B1:B20)
FOR i=1 TO NVAL
eingabe(i) = oSheet.Range(„B"+Format(i)).Value
NEXT i
Peter Sobe
84
ADO .NET (1)
Active Server
Pages
Application A
Application B
Build-InObjects
Script-engine
Component A
ADO
Component B
ADO – ActiveX Data
Objects, u.a. ADODB
Objekt für Datenbanken
übernommen von
Prof.Dr.Grossmann
DB
DB
85
ADO .NET (2)
 ADO bietet ein zentrales unabhängiges Datenbankobjekt
dataSet
 Mögliche (parallele) Nutzung relationaler Datenbanken
(Tabellen-orientiert) und hierarchischer Datenbanken
(XML)
 Trennung des Datenbankzugriffs und der
Weiterverarbeitung der Daten
 XML als Datenaustauschformat zwischen Anwendung und
Datenbank
Mehr dazu im Abschnitt 4
Peter Sobe
86
VBA-Skript (1)
Visual Basic ist als Skriptsprache in einige Office-Programme
eingebaut, so z.B. in Excel.
Skripte laufen innerhalb der Excel-Anwendung und dabei greifen auf
Daten des Excel Dokuments zu.
Die Sprache „Visual Basic“ wird dabei mit gleicher Syntax verwendet.
Aber die von der .NET Plattform bereitgestellten Funktionen und
Objektmethoden können nicht benutzt werden.
Zum Beispiel Excel und die Datenbank Access besitzen eine eigene
eingebaute Entwicklungsumgebung für VBA (zum Start Alt+F11)
Peter Sobe
87
VBA-Skript (2)
InputBox und MsgBox können benutzt werden
Beispiel
Peter Sobe
88
VBA-Skript (3)
Zugriff auf Dokumentdaten aus VBA-Skripten am Beispiel von Excel
Sichtbare Objekte:
Application
Workbook
Arbeitsmappe
Worksheet
Range
Peter Sobe
Tabellenblatt
Ausgewählte Felder
89
VBA-Skript (4)
Programmierung wie in Visual Basic .NET. Ein Verbinden mit der
Excel-Anwendung kann in der Skript-Umgebung aber weggelassen
werden.
Zugriff auf Dokumentdaten aus VBA-Skripten am Beispiel von Excel
per Range:
Z= ActiveSheet.Range(“M22“).Value
Z=…
ActiveSheet.Range(“N32“).Value = Z
Range übernimmt einen
String zur Identifikation der
Zelle oder des Bereichs.
Spalte (A, B, C, …) dann
Zeile (1,2,3,..
Alternative Technik zum Auslesen und Setzen von Zellen gegenüber
Range:
 Cells
 ActiveCell – muss vorher gesetzt werden
Peter Sobe
90
VBA-Skript (5)
Cells:
Z= ActiveSheet.Cells(13,22).Value
REM Angabe der Feldposition mit Zeilen- und Spaltenindex
ActiveCell:
Wenn vorab eine Zelle mit Activate ausgewählt wurde, kann der
Bezug auf ActiveCell erfolgen
Range(“F8").Activate
ActiveCell.Value = 37
Eine gute Übersicht zu VBA Skriptprogrammierung findet man z.B.
unter
ftp://ftp.fernuni-hagen.de/pub/pdf/urz-broschueren/broschueren/b012.pdf
Peter Sobe
91