Entwicklertagebuch JTL-Toolbox – Teil 7 CSV mit LINQ abfragen

Der Anwender ist ein Dummy oder DAU – Das ist nun mal so. Bis jetzt habe ich die Abfragen ziemlich statisch programmiert. Nun soll das ganze aber so sein, dass auch Blondi damit zurecht kommt. Auf gut Deutsch, die JTL-Toolbox soll Idioten sicher werden. Und bei den JTL Servicepartnern bin ich mir bis auf wenige Ausnahmen nicht sicher, ob sie viel mehr auf der Tasche haben, als ihre dann leidgeprüften Kunden. Marc Du musst jetzt keinen Kommentar unten ablassen, bei Dir weiß ich, dass Du zu den Ausnahmen gehörst. Kommen wir aber jetzt zu unserer robusten Programmierung.

2016-11-30-20_58_53-jtl-wawi-ameise_-daten-aus-jtl-wawi-exportieren-mandant_-eb-standard

Ich kann zwar eine Dokumentation zu dem Tool schreiben, ob die aber dann auch gelesen wird, steht auf einem anderen Blatt Papier. Ich habe aber keine Lust, bei jedem Kunden dieses Tool zu installieren und einzurichten. Das sollte der Anwender möglichst ohne die Zuhilfenahme eines Servicepartners gebacken bekommen. Und mit Klicken und Fensterln kennen sich die meisten Windowsanwender ja aus. Für den Rest bin ich dann als Entwickler verantwortlich. Also habe ich mir ein paar Gedanken zum grundsätzlichen Aufbau gemacht.

Das schöne an der Wawi ist, dass ich beim Export eigentlich alles geliefert bekommen. Schön wäre es natürlich, wenn ich von der JTL-Wawi-Ameise eine Rückmeldung bei Fehlern bekommen würde. Aber was noch nicht ist kann ja noch werden. Sind beim Export die Spaltenüberschriften mit dabei, kann ich aber die Exportdatei überprüfen und analysieren. Ich kann auch einen manuellen Export der Datei ermöglichen. Also ich bin hier ziemlich frei in der Wahl der Mittel. Der zweite Vorteil ist, das ich die Klasse für die Kunden nicht unbedingt benötige.

Meine CSV-Datei stellt im Grunde ein Array mit zwei Dimensionen dar. Rein mathematische habe ich die Zeilen x und diese sind in Spalten y unterteilt. Als Feld-Trenner dient entweder ein Semikolon, Komma oder Tabulator. Ich weiß aber nicht wie viele Spalten und Zielen die Datei hat. Ich muss also mit zwei Unbekannten arbeiten. Daraus ergibt sich, das ich meine LINQ-Abfrage auf die CSV-Datei ziemlich allgemein halten muss:

Jetzt habe ich zwar ein schönes Array, aber ich habe immer noch keine Ahnung, was in welcher Spalte gespeichert ist. Wenn unser Anwender aber beim Anlegen des Export den Hacken bei Kopfzeile erstellen nicht entfernt hat, wovon wir in der Regel ausgehen können, dann dürfte in der ersten Zeile unserer Exportdatei die Spaltenüberschriften stehen. Später kann ich dass sogar noch überprüfen und hier dem Anwender einen Hinweis geben, ob sein Export den Regeln entspricht.

Als nächstes muss ich meine Formel mit zwei Unbekannten auflösen. Ich brauche die Anzahl der Datensätze in meiner CSV-Datei und die Anzahl der Spalten. Die Anzahl der Datensätze kann ich mit der Funktion „count“ ermitteln und diese dann in einem Label ausgeben:

Bei der Gelegenheit kann ich gleich den Maximum-Wert meines ProgressBar Steuerelements auf die Anzahl der Datensätze festlegen. Was ich hier noch nicht implementiert habe, ist die Abfrage ob unsere CSV eine Kopfzeile hat, um dies mit einer Abfrage abzufangen. Hier gehe ich mal davon aus, dass die CSV eine Kopfzeile hat. Mit Count kann ich also ermitteln, wie viele Spalten meine erste Zeile hat und speicher anschließend diesen Wert in einer Variablen. Danach durchlaufe ich die Spalten und bilde mit den dort enthaltenen Werten die Spaltenüberschriften (ab Zeile 4 im folgenden Quellcode).

Was mit den Spaltenüberschriften so vorzüglich funktioniert hat, sollte auch mit den Datenzeilen in meiner CSV-Datei so funktionieren. In der ersten Schleife durchlaufe ich alle Datensätze ab der zweiten Zeile (numerisch 1) und lege einen neuen ListViewItem an. Anschließend durchlaufe ich die Spalten der Zeile und lege die SubItems an. Zum Schluss füge ich den Datensatz dem ListView Steuerelement hinzu und erhöhe den Wert des ProgressBar Steuerelements um 1 (bzw. ich könnte hier auch den Wert der Variable j dem Steuerelement zuweisen.).

Am Ende sieht das dann so aus:

2016-11-30-20_59_49-form1

Der komplette Quelltext kann hier eingesehen und heruntergeladen werden: https://github.com/schaemicon/CSV-LINQ. Wer die kleine Anwendung nur ausprobieren will, kann sich die fertig kompilierte Anwendung unten herunterladen und auf dem PC installieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.