Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Sequentielle Textdateien HARALD NAHRSTEDT. Erstellt am

Ähnliche Dokumente
Algorithmen für Ingenieure

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Typisierte Random Dateien HARALD NAHRSTEDT. Erstellt am

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA CustomViews in VBA nutzen HARALD NAHRSTEDT. Erstellt am

Klausur WS 2014/15 EDV Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

White Paper Wählen-Buttons in Excel

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Namen in VBA nutzen HARALD NAHRSTEDT. Erstellt am

Informatik Arbeit mit Dateien unter Visual Basic

4 Schleifen -= Entstanden unter Excel 2003 =-

Universität Duisburg - Essen

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Balloons in VBA nutzen HARALD NAHRSTEDT. Erstellt am

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Einfache Dialoge in VBA HARALD NAHRSTEDT. Erstellt am Bearbeitet am

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Informationsverarbeitung im Bauwesen

GridView Daten-Import aus einer csv-datei GridView Daten-Import aus einer csv-datei

1. Allgemeine Datei (Binärdatei mit formatierten Inhalt)

8. Arbeiten mit Dateien

Excel + VBA. Ergänzungen. Kapitel Einführung in VBA. Einfache Dialoge in VBA HARALD NAHRSTEDT. Erstellt am Bearbeitet am

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Objektbindungen und Verweise HARALD NAHRSTEDT. Erstellt am

Klausur WS 2013/14 EDV 2 Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 23

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Excel VBA. Teil Zusammenfassung! Was wir können sollten! V

Universität Duisburg - Essen

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Kommentare mit VBA verwalten HARALD NAHRSTEDT. Erstellt am

13 Unterprogramme erstellen

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

Modul 122 VBA Scribt.docx

Sub Rechnungsnummer() Range("A1") = Range("A1") + 1 End Sub

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Filter in VBA nutzen HARALD NAHRSTEDT. Erstellt am

Dateizugriff unter C

Klausur SS 2014 EDV Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Lösungen der Aufgaben

ACCESS. Formulare per VBA referenzieren FORMULARE MIT VBA PROGRAMMIEREN FORMULARE PER VBA REFERENZIEREN BASICS

4 Schleifen und Dateien

'Messung über die Soundkarte 'Programmlisting, erstellt mit Visual Basic '30. Januar 2005, F.-P. Zantis. Option Explicit Option Base 1

Übersicht Shell-Scripten

Die Klasse Collection (gb) implementiert eine Hash-Tabelle, deren Elemente aus einem Wert-Schlüssel-Paar

Arbeiten mit dem VBA-Makro Punkte ein- auslesen

Access Programmierung. Ricardo Hernández García. 1. Ausgabe, November 2013 ACC2013P

Name: Aufgaben. Arbeitsanweisung

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Klausur SS 2013 EDV Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Menue Vorher Nachher Bemerkungen

Die Sicherung d. Programms obliegt d. IDE; die Sicherung d. Ergebnisse obliegt d. Programm(iererIn).

E-PRIME TUTORIUM Die Programmiersprache BASIC

6 Ein- und Ausgabe. Bisher war unsere (Bildschirm-) Ausgabe leichtflüchtig (

Makro + VBA 2007 effektiv

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA OLE-Objekte HARALD NAHRSTEDT. Erstellt am

Verwenden Sie für jede Aufgabe die C++ IDE von Eclipse (pro Aufgabe ein Projekt).

Michael Kolberg. einfach klipp & klar. Microsofft* Press

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Einführung in die Programmierung mit VBA

Daten loggen mit der STI100-Platine

INFORMATIK TEIL: VBA. Infromatik WS 17/18 Teil: VBA. Allgemeines: - 4 Übungen á 3 Stunden

Lesen und Schreiben von Dateien

BAUINFORMATIK. SS 2013 Vorlesung III Johannes Lange

MAXIMUM2.STR Struktogramme. Aufgabe: 3 Zahlen eingeben, größte Zahl ermitteln und ausgeben.

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Daten mit VBA konsolidieren HARALD NAHRSTEDT. Erstellt am

Anleitung zum Download der EBMG_Datei_9_2.xls

1. Auswählen der mit Blattschutz versehenen Datei

Informatik. Wiederholung Felder (Arrays), string. Vorlesung

Aufgaben zu OOP der Klasse FTI32

Arithmetik in der tcsh

Inhalt. Dokument Beschreibung. Bentley Technical Support ProStructures.Net - Zusatzprogrammierung Visual Basic Express PST_Bearbeitung_Dialog

Makro Programmierung User Interface (Entwicklungs- Umgebung) Grafische Werkzeugbox. GUI Form erstellen (UserForm)

Michael Dienert. 8. Dezember 2016

10 Block 10: Verwendung von Modulen in Perl

Buchungen im falschen Monat/Buchungskreis erfasst oder Abrechnungsnummer falsch angelegt

Die SQL-Schnittstelle

Skriptum Bauinformatik SS 2013 (Vorlesung IV)

Die SQL-Schnittstelle

OLConnector Programmierung

Buchungen im falschen Monat/Buchungskreis erfasst oder Abrechnungsnummer falsch angelegt

Kurze Bedienungsanleitung für den Java-Editor

E-/A-Funktionalität nicht Teil der Programmiersprache

MODELL EL-9900 RECHNER MIT GRAFIK- FUNKTION BEDIENUNGSANLEITUNG

hue12 January 24, 2017

Algorithmen und ihre Programmierung

PDF EXPORT ERSTELLEN 20. Dezember 2018

Kapitel 3 Datentypen, Variablen und Konstanten

Excel Funktionen durch eigene Funktionen erweitern.

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Programmieren in C/C++ und MATLAB

Generierung von Zufallszahlen gemäß einer vorgegebenen diskreten Verteilung

Programmieren in Anwendungen

Funktionen in JavaScript

HARALD NAHRSTEDT. Excel + VBA. Ergänzungen Teilergebnisse mit VBA

Python für Linguisten

Access 2010 Programmierung Import und Export nach Excel

Klassen und Objekte (1)

Transkript:

HARALD NAHRSTEDT Excel + VBA Ergänzungen Kapitel 1 Einführung in VBA 1.5.23 Sequentielle Textdateien Erstellt am 12.02.2012 Beschreibung In Textdateien lassen sich schnell Informationen speichern und auch wieder schnell abrufen. Dabei sind diese Dateien für ein Schreiben und Lesen des gesamten Textes gedacht. Eben ein sequentielles Schreiben und Lesen von Textzeilen. Andere Methoden lassen sich mit einem kleinen Programmieraufwand auch bewerkstelligen. Die Handhabung der Daten geht bei großen Datenmengen aber deutlich nur mit großem Zeitaufwand.

1.5.23 Sequentielle Textdateien 1 Kapitel... 0 1 Einführung in VBA... 0 1.5.23 Sequentielle Textdateien... 0 1.5.23.1 Struktur einer sequentiellen Datei... 1 1.5.23.2 In Textdateien schreiben und lesen... 1 1.5.23.3 Textdateien Text anfügen... 3 1.5.23.4 Bestimmte Zeilen aus Textdateien lesen... 4 1.5.23.5 Textdateien ändern... 4 1.5.23.1 Struktur einer sequentiellen Datei In Textdateien lassen sich schnell Informationen speichern und wieder abrufen. Dies trifft nur für den gesamten Inhalt einer Textdatei zu. Das liegt daran, dass die Zeilen einer Textdatei nur sequentiell hintereinander in eine Textdatei geschrieben, bzw. gelesen werden können. Daher auch die Bezeichnung sequentielle Datei. Eine sequentielle Datei hat folgende Struktur 1. Zeile: Eine beliebige Folge von Textzeichen CR LF 2. Zeile: Eine beliebige Folge von Textzeichen CR LF 3. In einer Zeile steht eine beliebige Anzahl Buchstaben, Ziffern und Sonderzeichen. Die Zeile endet mit zwei Steuerzeichen. Nämlich CR für Carriage Return (VBA-Konstante vbcrb, ASCII-Wert = 13) und LF für Line Feed (VBA-Konstante vblf, ASCII-Wert = 10). Beide Steuerzeichen sind in der VBA-Konstanten vbcrlf vereint. Die Bezeichnungen stammen noch aus einer Zeit, als jedermann eine mechanische Schreibmaschine benutzte. Hatte man eine Zeile geschrieben und wollte man eine neue Zeile beginnen, dann musste man einen Hebel nach rechts schieben, dadurch wurde der Wagen (am Hebel eine Anschlagwalze mit eingespannten Blatt) nach rechts geschoben (Carriage Return), also an den Zeilenanfang, und gleichzeitig wurde die Walze mit dem eingespannten Blatt um eine Zeile nach oben gedreht, also eine neue Zeile begonnen (Line Feed). In Word lässt sich ein Modus einstellen, der diese Steuerzeichen anzeigt. 1.5.23.2 In Textdateien schreiben und lesen Die übliche Handhabung einer Textdatei sieht folgende Vorgehensweise vor. Den gesamten Text einer sequentiellen Datei in eine Variable lesen, Änderungen durchführen und dann den gesamten Text wieder speichern. Die nachfolgende Prozedur schreibt einen aus mehreren Zeilen bestehenden Text (in einer Variablen) in eine sequentielle Datei. Damit der Inhalt einer bestehenden Datei gleichen Namens verloren geht, wird die Datei im Output-Modus geöffnet. Eine weitere Prozedur liest den Inhalt der so erstellten Datei. Wir erstellen ein Modul, das die Prozeduren und Daten einer Sequentiellen Datei enthält.

1 Einführung in VBA Option Explicit 'Text in Datei speichern, alter inhalt geht verloren Public Sub WriteAllText(ByVal sfilename As String, _ ByVal slines As String) Open sfilename For Output As #ifile Print #ifile, slines 'Lesen des gesamten Inhaltes einer Textdatei Public Function sreadalltext(byval sfilename As String) _ As String 'Existiert die Datei? If Dir(sFilename, vbnormal) <> "" Then 'Textdatei im Binärmodus öffnen und gesamten 'Inhalt in einem Rutsch auslesen Open sfilename For Binary As #ifile sreadalltext = Space$(LOF(iFile)) Get #ifile,, sreadalltext End Function Die Prozeduren zum Testen der Datei-Prozeduren schreiben wir in ein separates Code-Modul. Option Explicit Sub TextDateiSchreiben() Dim slines As String slines = "Dies ist ein Testtext!" & vbcrlf slines = slines & "Dies ist die zweite Zeile." & vbcrlf slines = slines & "Dies ist die dritte Zeile." & vbcrlf slines = slines & "Dies ist die vierte Zeile." & vbcrlf slines = slines & "Dies ist die fünfte Zeile." & vbcrlf slines = slines & "Dies ist die letzte Zeile." sfilename = "C:\Temp\Text\Test.txt" Call WriteAllText(sFilename, slines) Sub TextDateiLesen()

1.5.23 Sequentielle Textdateien 3 sfilename = "C:\Temp\Text\Test.txt" MsgBox sreadalltext(sfilename) Nach Ausführung hat die Datei folgenden Inhalt (Text markiert). 1.5.23.3 Textdateien Text anfügen Einer bestehenden Textdatei weitere Zeilen anzuhängen, ist im Dateimodus Append sehr einfach. Die nachfolgende Datei-Prozedur macht es möglich. 'Zeilen an Textdatei anhängen Public Sub AppendLineText(ByVal sfilename As String, _ ByVal slines As String) Open sfilename For Append As #ifile Print #ifile, slines Die entsprechende Testprozedur fügt zwei weitere Zeilen an. Zu beachten ist, dass vbcrlf nur zwischen die Zeilen gesetzt werden muss. Sub TextDateiErweitern() Dim slines As String slines = "Dies ist die erste neue Zeile." & vbcrlf slines = slines & "Dies ist die zweite neue Zeile." sfilename = "C:\Temp\Text\Test.txt" Call AppendLineText(sFilename, slines)

1 Einführung in VBA 1.5.23.4 Bestimmte Zeilen aus Textdateien lesen Möchte man eine bestimmte Zeile aus der Textdatei verwenden, so muss die nachfolgende Datei-Prozedur sreadlinetext verwendet werden. Sie liest alle Zeilen der Textdatei und zählt sie, bis die entsprechende Zeile gelesen wird. ' Lesen einer bestimmten Zeile einer Textdatei Public Function sreadlinetext(byval sfilename As String, _ ByVal LineToRead As Long) As String Dim sline As String Dim lrow As Long lrow = 0 'Existiert die Datei? If Dir(sFilename) <> "" Then Open sfilename For Input As #ifile 'Solange einlesen, bis entweder Dateiende 'oder gewünschte Zeilennummer erreicht While Not EOF(iFile) And lrow < LineToRead lrow = lrow + 1 Line Input #ifile, sreadlinetext Wend If EOF(iFile) Then sreadlinetext = "" End Function Die nachfolgende Prozedur testet diese Funktion. Sub TextZeileLesen() sfilename = "C:\Temp\Text\Test.txt" MsgBox sreadlinetext(sfilename, 5) 1.5.23.5 Textdateien ändern Etwas komplizierter wird es, will man eine Zeile ersetzen oder einfügen. In diesem Fall gibt es mehrere Möglichkeiten. Wenn die Datei noch nicht existiert, muss diese und die Zeilen vor der Position als Leerzeilen angelegt werden. Existiert die Datei, aber die Position liegt hinter dem Dateiende, dann müssen ebenfalls Leerzeilen bis zur Einfügeposition angelegt werden. Ist die Zeile in der Datei vorhanden, kann sie durch die neue Zeile ersetzt oder hinter der neuen Zeile eingefügt werden.

1.5.23 Sequentielle Textdateien 5 Dabei wird eine temporäre Datei angelegt, in welcher der neue Inhalt der Quelldatei erstellt wird. Erst danach wird die Quelldatei gelöscht und anschließend durch eine Kopie der temporären Datei ersetzt. Windows verwaltet ein Verzeichnis für temporäre Dateien und vergibt auch bei Bedarf Namen für temporäre Dateien. Die nachfolgenden Definitionen ergänzen das TextDatei-Modul. 'Ermittelt temporäres Verzeichnis Private Declare Function GetTempPath Lib "kernel32.dll" _ Alias "GetTempPathA" ( _ ByVal nbufferlength As Long, _ ByVal lpbuffer As String) As Long 'Ermittelt temporären Dateinamen Private Declare Function GetTempFileName Lib "kernel32" _ Alias "GetTempFileNameA" ( _ ByVal lpszpath As String, _ ByVal lpprefixstring As String, _ ByVal wunique As Long, _ ByVal lptempfilename As String) As Long Private stemppath As String 'Bestimmt temporäre Datei Public Function stempfilename() As String Dim stempname As String Dim RetVal As Long 'Temp. Verzeichnis If stemppath = "" Then stemppath = Space$(256) RetVal = GetTempPath(Len(sTempPath), stemppath) stemppath = Left$(sTempPath, RetVal) 'Temp. Dateiname stempname = Space$(256) Call GetTempFileName(sTempPath, "txt", 0&, stempname) stempname = Left$(sTempName, _ InStr(sTempName, Chr$(0)) - 1) stempfilename = stempname End Function Auch diese Prozeduren sollen natürlich getestet werden. Die nachfolgend einfache Testprozedur liefert eine temporäre Datei mit Verzeichnis. Sub TempDateiBestimmen() Dim stext As String

1 Einführung in VBA stext = stempfilename MsgBox stext Mithilfe der nun vorhandenen Datei-Prozeduren kann die gewünschte Datei-Prozedur zum Einfügen oder Ersetzen eine Textzeile in einer sequentiellen Datei erstellt werden. 'Einzelne Zeile in eine Textdatei speichern Public Sub WriteLineText(ByVal sfilename As String, _ ByVal LinePos As Long, ByVal snewline As String) Dim itemp As Integer Dim lcount As Long Dim lrow As Long Dim sline As String Dim stempfile As String If Dir(sFilename, vbnormal) = "" Then 'Datei existiert nicht Open sfilename For Output As #ifile 'vorherige Leerzeilen erzeugen For lcount = 1 To LinePos - 1 Print #ifile, "" Next lcount 'Zeile speichern Print #ifile, sline Else 'Temporäre Datei erstellen stempfile = stempfilename() 'Quelldatei zum Lesen und 'temporäre Datei zum Schreiben öffnen : Open sfilename For Input As #ifile itemp = FreeFile: Open stempfile For Output As #itemp 'Original-Datei einlesen und x. Zeile durch 'neuen Inhalt ersetzen lrow = 0 Do While Not EOF(iFile) lrow = lrow + 1 Line Input #ifile, sline If lrow = LinePos Then ' x. Zeile durch neuen Inhalt ersetzen sline = snewline Print #itemp, sline Loop 'notfalls müssen Leerzeilen ergänzt werden If lrow < LinePos Then

1.5.23 Sequentielle Textdateien 7 For lcount = lrow + 1 To LinePos - 1 Print #itemp, "" Next lcount Print #itemp, snewline 'Dateien schliessen Close #itemp 'Alte Datei löschen Kill sfilename 'temporäre Datei kopieren FileCopy stempfile, sfilename 'temporäre Datei löschen Kill stempfile Und auch dafür wird eine Testprozedur benötigt. Sub TextZeileEinfügen() Dim sline As String sfilename = "C:\Temp\Text\TestNeu.txt" sline = "Dies ist eine eingefügte Zeile." Call WriteLineText(sFilename, 5, sline)