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

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

ToolBar Datentyp Default Beschreibung AutoResize Boolean False Gibt an, ob sich die Größe der ToolBar automatisch an den Inhalt anpasst

Komplexe Zahlen Komplexe Zahlen

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

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

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

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

Access 2010 Programmierung Import und Export nach Excel

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

Sonstige Daten importieren.

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

Algorithmen und ihre Programmierung

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

Modul 122 VBA Scribt.docx

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

Für den Aufruf der Wetterdaten für den Ort Osterburg in Deutschland wurden diese Werte verwendet:

ipin CSV-Datenimport (Mac OS X)

FlexiForm 2 Datenexport und Import in Excel

PDF EXPORT ERSTELLEN 20. Dezember 2018

ArchivInformationsSystem Archivis. Archivis-Handreichung 1 Massendatenimport aus OpenOffice Calc (Entwurf)

13 Unterprogramme erstellen

Access 2000 Programmierung

Dateien von CSV-Datei Importieren

Probeklausur Informatik 2 Sommersemester 2013

Lohndaten importieren

Diese geometrischen Formen (Linien oder Flächen oder Text) in sechs Kategorien können Sie auf die Zeichenfläche zeichnen:

Beispiele für den Einsatz einer TextBox Validierung von Eingaben

Allgemeiner Import-Ablauf

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

Abbildung : Aufruf des Wikis (Server: Interner Web-Server HTTPD auf Port 8080)

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

Data exchange with Prosonic Flow 93T

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

Stand: Fremddateneinzug Modulbeschreibung

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Deterministische endliche Automaten - Wiederholung

Informationsverarbeitung im Bauwesen

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

Kommentierte Lösung zur Aufgabe Kiosk

PHP-Skripte in Anwendung mit einer MySQL-Datenbank am Beispiel der Datenbank Personalwesen

Ihr Name: Massen- Globalmutation via Export und Re- Import

White Paper Wählen-Buttons in Excel

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

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

Universität Duisburg - Essen

Format: EasyShip DOS & 4.5 Format (.txt) Import von Empfängeradressen Harmonisiertes Adressbuch

Erste Schritte mit SigmaPlot

Datenformat zum Import von CSV-Dateien

Anlagenbuchhaltung NTCS Variabler Import. Interne Kurz-Doku. Stand V 14.26

Programmieren lernen mit Visual Basic

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */)

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

EXCEL VBA Cheat Sheet

Informatik II Aufgabenblatt 6

Funktionen nur wenn dann

Import von Empfängeradressen Harmonisiertes Adressbuch

Beispielprüfung CuP WS 2015/2016

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Canto Cumulus Daten nach Daminion importieren

Anleitung CSV-Import KLR-Zuordnungen - Version: Draft

Zweitens über eine Abfrage, welche die Tabellen tblartikel und tbllieferanten verknüpft. Auf diese Weise würde das Kombinationsfeld

Funktionen nur wenn dann

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

Grundlagen der Informatik

Daten Import. 2. Daten für Import aufbereiten allgemeines Überblick

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

Inhalt. Formularbaukasten

ACCESS. Kombinationsfeld um Suche erweitern FORMULARE FÜR DIE DATENEINGABE KOMBINATIONSFELD UM SUCHE ERWEITERN BASICS

Datenformat zum Import von CSV-Dateien

Programming 101. Carl Herrmann IPMB & DKFZ

1)Login Funktion ohne Datenbank

MiniPPS - Systembeschreibung

2 Programmieren in Java I noch ohne Nachbearbeitung

Zahlreiche Möglichkeiten zum dauerhaften Speichern und Laden von Daten Meist: Speichern in verschiedenen Dateiformaten Anwendungen:

Microsoft Access 2010 Bilder

Format: Fedexworld Format (.csv) Import von Empfängeradressen Harmonisiertes Adressbuch

W7 Projekt im Zusammenhang Gästebuch

4. Die lexikalische Analyse

Verwendete Variablen im Modul dbase

Excel VBA Arrays, Enumeration und benutzerdefinierte Typen

Welche Informatik-Kenntnisse bringen Sie mit?

1 Berechnung von Summen (ca = 10 Punkte)

Aufbau eines "B-Baums" der Ordnung 3, Teil 1

Einführung in die Programmierung für NF MI. Übung 04

Einstieg in die Informatik mit Java

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

LERN-ONLINE.NET AUFGABENBLATT INFORMATIK

Netxp GmbH Mühlstrasse 4 D Hebertsfelden Telefon Telefax Url:

Transkript:

17.7.7 GridView Daten-Import aus einer csv-datei In vielen Programmen besteht die Möglichkeit, Daten in einer csv-datei zu speichern, um diese dann in einem anderen Programm weiter zu verarbeiten. Sie kennen das sicher aus der Arbeit mit einem Kalkulationsprogramm. Probleme beim Daten-Import aus einer csv-datei gibt es immer dann, wenn man nicht sicher ist, welche Text- und Feldtrennzeichen beim Daten-Export verwendet wurden, nicht weiß, ob der erste Datensatz in der csv-datei Feldnamen enthält oder ein Text- und Feldtrennzeichen in einem Feld enthalten ist. Das ist zum Beispiel der Fall, wenn die System-Lokalisation auf deutsch eingestellt ist und reelle Zahlen mit einem Komma als Dezimaltrennzeichen speichert werden. In der ersten Variante für den Daten-Import aus einer csv-datei wird von einer (englischen) Lokalisation ausgegangen, bei der u.a. reelle Zahlen mit einem Punkt als Dezimaltrennzeichen speichert werden. Das Projekt besteht aus dem Hauptprogramm von dem ein Formular für die Ermittlung der Textund Feldtrennzeichen aufgerufen werden kann sowie einem Modul. Das Modul stellt dem Programm über 2 Funktionen eine Datenmatrix zur Verfügung, in der alle Feld-Inhalte aus der csv-datei gespeichert sind. Ideale Voraussetzungen, die Daten 'en bloc' blitzschnell in die GridView einzufügen und anzuzeigen. Abbildung 17.7.7.1: Hauptprogramm mit der GridView Zuerst wählen Sie die csv-datei (Dateifilter) in einem Dialog: Abbildung 17.7.7.2: FileOpen-Dialog Abbildung 17.7.7.3: Festlegung der Trennzeichen Im o.a. Formular werden maximal die ersten beiden Zeilen der csv-datei angezeigt, damit Sie erkennen und auswählen können: 1

Kapitel 17.7.7 - GridView Daten-Import aus einer csv-datei welche Text- und Feldtrennzeichen in der csv-datei verwendet wurden und ob der erste Datensatz in der csv-datei Feldnamen enthält. Abschließend wird die csv-datei geöffnet und deren Feld-Inhalte sowie u.u. auch die Feldnamen in einer Datenmatrix gespeichert und deren Inhalt sofort in die GridView eingefügt und angezeigt: Abbildung 17.7.7.4: Anzeige der Felder hier mit Feldnamen in der GridView Interessant ist vor allem der Quelltext des Moduls, der komplett angegeben wird, während vom Hauptprogramm nur 2 Prozeduren kommentiert werden: [1] PUBLIC hfile AS File [2] PUBLIC sfeldtrennzeichen AS String [3] PUBLIC stexttrennzeichen AS String [4] PUBLIC bexisttitel AS Boolean [5] PUBLIC bfileopencancel AS Boolean [6] PUBLIC ifieldcount AS Integer [7] PUBLIC apreview AS Variant[] [8] PUBLIC amatrix AS Variant[] [9] [10] PUBLIC FUNCTION FileOpen() AS Boolean [11] DIM sline AS String [12] [13] Dialog.Title = "Importieren Sie eine csv Datei!" [14] Dialog.Filter = ["*.csv", "csv Dateien"] [15] IF Dialog.OpenFile(FALSE) = TRUE THEN ' Multiselect=False (Standard) [16] Message.Info("Das Öffnen der csv Datei wurde abgebrochen!") [17] ' Cancel Button gedrückt [18] ELSE [19] hfile = OPEN Dialog.Path FOR INPUT [20] IF Lof(hFile) = 0 THEN [21] Message.Info("Die csv Datei ist leer!") [22] hfile.close [23] [24] ELSE [25] apreview = NEW Variant[] [26] WHILE NOT Eof(hFile) [27] LINE INPUT #hfile, sline [28] apreview.add(sline) [29] WEND [30] ENDIF ' Lof(File) = 0? [31] ENDIF ' Dialog.OpenFile(FALSE) = TRUE? [32] ' Wenn KEIN Fehler eintrat, dann... [33] RETURN TRUE [34] END ' FileOpen() [35] [36] PUBLIC FUNCTION ImportCSV2Matrix(pTextTrenner AS String, pfeldtrenner AS String) AS Boolean [37] DIM sline AS String [38] DIM icount AS Integer [39] DIM afieldlist AS String[] ' Der Typ ist durch den Funktionswert von Split() festgelegt [40] [41] amatrix = NEW Variant[] [42] SEEK #hfile, 0 ' Notwendig, weil das existierende Datei Handle genutzt wird [43] WHILE NOT Eof(hFile) [44] LINE INPUT #hfile, sline [45] sline = Replace(sLine, ptexttrenner, "") [46] afieldlist = NEW String[] ' Für jede Zeile wird ein neues Array genutzt [47] IF icount = 0 THEN [48] ifieldcount = Split(sLine, pfeldtrenner).count [49] INC icount [50] ENDIF ' icount = 0 [51] afieldlist = Split(sLine, pfeldtrenner) ' Lokalisation englisch! [52] amatrix.add(afieldlist) [53] WEND ' NOT Eof(hFile) [54] ' Wenn KEIN Fehler eintrat, dann... [55] RETURN TRUE [56] END ' ImportCSV2Matrix 2

In den Zeilen 25 bis 29 wird eine Matrix apreview mit den originalen Datensätzen aus der csv- Datei gefüllt. Diese Matrix wird im Formular CSVDatei2Matrix für die Vorschau auf die ersten beiden Zeilen in der csv-datei verwendet. In der Zeile 48 wird die Anzahl der Felder ermittelt und für die Festlegung der Spaltenzahl in der GridView benötigt. Die Anzahl der Zeilen in der GridView entspricht der Anzahl der Elemente in der Matrix mit dem Namen amatrix. Das Aufteilen eines Datensatzes in Zeile 51 unter Einsatz des Feldtrennzeichen liefert einzelne Zeichenketten, die als Elemente in eine Matrix afieldlist vom Typ String[] eingefügt werden. Wenn in beiden Funktionen keine Fehler auftraten, dann wird die GridView sofort mit den Daten aus amatrix gefüllt, wie Sie der Abbildung 17.7.7.4 entnehmen können. Zum Einsatz kommt auch hier die das bewährte GridView_Data-Ereignis: PUBLIC SUB GridView1_Data(Row AS Integer, Column AS Integer) GridView1.Data.Text = MCSV.aMatrix[Row][Column] IF Row MOD 2 = 1 THEN GridView1.Data.Background = Color.RGB(224, 224, 224) ' hellgrau ENDIF ' MOD 2 = 0? END ' GridView1_Data(..) Im Hauptprogramm sind es die Funktion ImportCSVFile() und die Prozedur DisplayGridView(), mit denen Sie den FileOpen-Dialog, das Speichern der importierten Feld-Daten in einer Matrix, das Setzen der GridView-Eigenschaften und das Anzeigen der Feldinhalte in der GridView realisieren: PUBLIC FUNCTION ImportCSVFile() AS Boolean IF MCSV.FileOpen() = FALSE THEN 'Message.Warning("Fehler beim Öffnen der CSV Datei!") ENDIF ' MCSV.FileOpen() = FALSE? FImport.ShowModal() IF MCSV.bFileOpenCancel = TRUE THEN Message.Warning("Daten Import abgebrochen!") ENDIF ' MCSV.bFileOpenCancel = TRUE? IF MCSV.ImportCSV2Matrix(MCSV.sTextTrennzeichen, MCSV.sFeldTrennzeichen) = FALSE THEN Message.Warning("Fehler beim Daten Import aus der CSV Datei!") ENDIF ' Fehler beim Auslesen der csv Datei? ' Wenn KEIN Fehler eintrat, dann... RETURN TRUE END ' ImportCSVFile() PUBLIC SUB DisplayGridView() IF ImportCSVFile() = TRUE THEN SetGridProperty(MCSV.iFieldCount, MCSV.bExistTitel, MCSV.aMatrix[0]) IF MCSV.bExistTitel = TRUE THEN MCSV.aMatrix.Remove(0) GridView1.Rows.Count = MCSV.aMatrix.Count ' Erst jetzt wird das Gitter mit Werten gefüllt! GridView1.SetFocus GridView1.MoveTo(0, 0) ELSE Message.Warning("Es ist ein Fehler aufgetreten!") ENDIF ' ImportCSVFile() = FALSE? END ' DisplayGridView Der Datenimport aus einer csv-datei mit dem u.a. Inhalt funktioniert ohne Fehlermeldungen und ergibt die danach eingefügte Anzeige in einer GidView, weil die Zahl ein Feldtrennzeichen enthält: "Zahl","Wahrheitswert","Zeichenkette","Datum" "83,21","False","Anna","14.01.2015" "8,015","False","Hans","24.06.2014" Abbildung 17.7.7.5: Fehlerhafte Anzeige der Felder in der GridView 3

Kapitel 17.7.7 - GridView Daten-Import aus einer csv-datei Auf einem System mit deutscher Lokalisation werden Sie ständig mit diesem Problem zu tun haben. Die Lösungen können vielfältig ausfallen, weil es sehr unterschiedliche Ansätze geben kann. Einer wäre die Verwendung eines anderen Feldtrennzeichens, obgleich der Standard das Komma ist. In der vorgestellten Lösung kommt ein DEA (Deterministischer Endlicher Automat) im Modul zum Einsatz. Sie brauchen deshalb nur die Funktion ImportcSV2Matrix aus dem vorangegangenen Projekt gegen die folgende tauschen: [1] PUBLIC FUNCTION ImportCSV2Matrix(pTextTrenner AS String, pfeldtrenner AS String) AS Boolean [2] DIM sline, szustand, sfield, smitteilung, sleer AS String [3] DIM seingabezeichen AS String [4] DIM icount, izeile, k, i AS Integer [5] DIM afieldlist AS Variant[] [6] DIM afieldslist AS Variant[] [7] [8] afieldlist = NEW Variant[] [9] afieldslist = NEW Variant[] [10] amatrix = NEW Variant[] [11] [12] szustand = "z0" [13] sfield = "" [14] SEEK #hfile, 0 [15] [16] WHILE NOT Eof(hFile) [17] INC izeile [18] LINE INPUT #hfile, sline [19] sline = Trim(sLine) [20] IF NOT Eof(hFile) THEN [21] sline &= Chr(30) ' Chr(30)=Record Separator [22] ELSE [23] sline &= Chr(3) & Chr(30) ' Chr(3)= ETX (End of text) [24] ENDIF ' NOT Eof(hFile)? [25] [26] ' Anfang Deterministischer Endlicher Automat [27] FOR icount = 1 TO Len(sLine) [28] seingabezeichen = Mid(sLine, icount, 1) [29] SELECT szustand [30] ' [31] CASE "z0" [32] IF seingabezeichen = ptexttrenner THEN [33] szustand = "z1" [34] ELSE [35] szustand = "zf" [36] ENDIF [37] ' [38] CASE "z1" [39] IF seingabezeichen <> ptexttrenner THEN sfield &= seingabezeichen [40] IF seingabezeichen = ptexttrenner AND icount < Len(sLine) THEN [41] afieldlist.add(sfield) [42] sfield = "" [43] szustand = "z2" [44] ENDIF [45] ' [46] CASE "z2" [47] IF seingabezeichen = Chr(30) THEN [48] szustand = "z0" [49] afieldlist.add(sfield) [50] afieldslist.add(afieldlist) [51] afieldlist = NEW Variant[] [52] ENDIF [53] IF seingabezeichen = pfeldtrenner THEN szustand = "z0" [54] IF seingabezeichen = Chr(3) THEN szustand = "z3" [55] IF seingabezeichen <> pfeldtrenner AND seingabezeichen <> Chr(30) AND / [56] seingabezeichen <> Chr(3) THEN [57] szustand = "zf" [58] ENDIF [59] ' [60] CASE "z3" [61] IF seingabezeichen = Chr(30) THEN [62] ' Message.Info("<center><font color='darkgreen'><b>der Endzustand ist erreicht!</b> / [63] <hr>fehler = NULL</font></center>") [64] afieldslist.add(afieldlist) [65] amatrix = afieldslist [66] ENDIF [67] ' [68] CASE "zf" [69] smitteilung = "<font color='red'><b>fehler!</b></font><br />" [70] smitteilung &= "<hr>zeile = " & Str(iZeile) & "<br />" [71] smitteilung &= "Zeichen = " & Str(iCount 1) [72] Message.Error(sMitteilung) [73] hfile.close 4

[74] [75] END SELECT [76] NEXT ' icount [77] ' Ende Deterministischer Endlicher Automat [78] WEND ' NOT Eof(hFile) [79] [80] hfile.close [81] icolumncount = afieldlist.count [82] ' Wenn KEIN Fehler eintrat, dann... [83] RETURN TRUE [84] END ' ImportCSV2GridView(...) In den Zeilen 20 bis 24 werden das Ende jedes Datensatzes und das Ende des letzten Datensatzes in besonderer Weise markiert. Der DEA kommt in den Zeilen 26 bis 77 zum Zuge. Sie sehen, wie in Abhängigkeit vom Eingabezeichen und dem aktuellen Zustand ein neuer Zustand eingenommen wird und u.u. auch Etwas ausgegeben wird. Der Fehlerzustand wird eingenommen, wenn eine Zeile aus der CSV-Datei syntaktisch nicht in Ordnung ist. Es wird der Funktionswert FALSE zurückgegeben und der Import abgebrochen. Abbildung 17.7.7.6: Korrekte Anzeige der Felder in der GridView (Einsatz DEA) Auch in einem anderen Fall können Sie in Bedrängnis geraten nämlich genau dann, wenn Sie eine csv-datei verwenden, in der u.a. der Name des Sängers Mike O'Bryan vorkommt und jemand voller Begeisterung für das csv-dateiformat das einfache Anführungszeichen ' als Texttrennzeichen nutzt. Lassen Sie sich durch Nichts und Niemanden aufhalten, um für diesen Fall eine eigene Lösung zu finden! 5