- Beiträge: 22
Import-Datei auf Spaltenanzahl und Feldnamen prüfen
- Michael Schaffert
- Autor
- Offline
- Benutzer
gibt es eine Möglichkeit, beim TextFileAdapter (Read) zu prüfen, ob die Eingangsdatei (in diesem Fall CSV) die korrekte Spaltenanzahl aufweist und idealerweise auch noch die Spaltenüberschriften korrekt sind? Es geht darum zu prüfen, ob die Eingangsdatei das richtige Format hat, ansonsten sollte der Flow abgebrochen werden mit einer Fehlermeldung.
Vielen Dank für Eure Antworten!
Viele Grüße
Michael
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
das geht über einen vorgelagerten Verarbeitungsschritt.
Hier lesen Sie über den TextFile Adapter lediglich die erste Zeile (=Spaltennamen) in ein Feld ein. Aktivieren Sie hierzu auf dem Reiter „Trennzeichen“ den Punkt „Anderes Trennzeichen“ und vergeben Sie einen Wert der in Ihren Daten nicht vorkommt, z.B. #!#
So werden die Spaltenüberschriften in ein Feld eingelesen. Diesen Wert können Sie dann über einen IF-THEN-ELSE Heater prüfen ob das einem Refernzwert entspricht. Falls nicht beendet der Stop Heater die Verarbeitung mit einer definierbaren Fehlermeldung.
Hinweis: Der zweite Stop Heater wird nur benötigt damit bei der Spaltenprüfung nicht unnötig alle Daten der CSV Datei gelesen werden müssen.
Im Anhang finden Sie ein kleines Beispiel dazu
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Michael Schaffert
- Autor
- Offline
- Benutzer
- Beiträge: 22
Hat prima geklappt!
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Michael Schaffert
- Autor
- Offline
- Benutzer
- Beiträge: 22
ergänzend zu meiner Frage mit der Feldnamen-Prüfung hat sich die Überlegung ergeben, ob es auch möglich ist, abhängig vom Ergebnis dieser Prüfung, den 2. Arbeitsschritt zu steuern.
Das heißt, ist die Eingabe-Datei mit den Feldnamen des Typs 1 (Name, Vorname, Kd.-Nr.) versehen, soll eine andere Verarbeitung durchgeführt werden als wenn diese vom Typ 2 (Firma, Kd-Nr.) sind.
Ist so etwas denkbar?
Viele Grüße
Michael
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
ja und nein. Es wäre theoretisch denkbar hier über den .NET Script Heater was zu bauen, ist aber schwer wartbar und nicht empfehlenswert. Auf der TODO Liste steht so eine ähnliche Funktionalität für den FlowHeater Server um bei einer Verzeichnisüberwachung zu entscheiden welche Definition jetzt aufgerufen werden muss.
Bis dahin am besten über das Batch Modul und Wildcards arbeiten. Meistens haben die zu verarbeitenden Textdateien einen passenden Namen worüber eingegrenzt werden kann um welchen Dateityp es sich handelt.
z.B.
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Michael Schaffert
- Autor
- Offline
- Benutzer
- Beiträge: 22
ganz so einfach mit den Dateinamen stellt sich das leider nicht dar.
Generell funktioniert das mit den Wildcards und dem Batch-Modul ganz gut.
Es gibt jedoch einen Fall, bei dem die Dateien gleich heißen und sich nur über den internen Aufbau der Spalten unterscheiden.
Haben Sie noch eine Idee, wie man das abfangen könnte?
Viele Grüße
Michael Schaffert
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
hier mal ein Beispiel wie es geht, im Anhang gibt´s auch ein kleines Beispiel dazu.
Folgendes wird gemacht)
Im ersten Verarbeitungsschritt wird geprüft um welchen Dateityp es sich handelt. Hierzu wird untenstehendes C# Skript für den .NET Script Heater verwendet Im Skript werden erstmal alle Verarbeitungsschritte, außer dem ersten Verarbeitungsschritt, deaktiviert. Dann wird anhand der CSV Spaltenüberschriften geprüft welche Datei vorliegt und dieser Verarbeitungsschritt wird dann aktiviert, siehe Kommentare im Skript.
Die Definition benötigt also einen initialen ersten Verarbeitungsschritt um die Steuerung zu implementieren, sowie beliebig viele die dann jeweils einen bestimmten Dateityp verarbeiten.
Wie schon geschrieben ist das sehr komplex und nicht unbedingt wartungsfreundlich.
C# Skript um Dateityp/Aufbau zu prüfen und abhänig davon einen Verarbeitungsschritt zu aktivieren
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Michael Schaffert
- Autor
- Offline
- Benutzer
- Beiträge: 22
Vielen Dank für das kleine Script.
So kompliziert fand ich das jetzt gar nicht. C++ kenn ich noch aus dem Studium.
Ich habe es noch ein bisschen angepasst und jetzt funktioniert es genauso wie ich es mir vorgestellt hatte. Super!
Eine kleine Frage hab ich aber dennoch dazu: Kann man die Warnungen, welcher Verarbeitungsschritt nicht ausgeführt wird, in der Batch-Ausführung unterdrücken? Das verwirrt sonst später die Anwender, die sollen sich ja auch wirkliche Warnungen und Fehler konzentrieren können.
Wenn ich beim 1. Verarbeitungsschritt die Checkbox Eigenschaften "Warnungen ignorieren" setze, hat das irgendwie keine Auswirkung auf die Ausgabe auf der Konsole.
Viele Grüße
Michael
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
das geht leider nicht, außer das Batch Modul wird explicit mit der Option /ExecuteSteps aufgerufen. In dem Fall wird, falls Verarbeitungsschritte übersprungen wurden, keine Warnung ausgegeben.
Alternativ dazu könnten alle Warnungen im Batch Modul über die Option /DisableWarnings deaktiviert werden.
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Michael Schaffert
- Autor
- Offline
- Benutzer
- Beiträge: 22
nachdem die Anwendung der Spaltenanzahl- und Spaltennamen-Prüfung hervorragend mit CSV-Dateien klappt, stehe ich jetzt vor dem Problem, dass ich das auch für XLSX (Excel)-Dateien benötigen könnte. Gibt es da auch eine Lösung? Bzw. gibt es eine generelle Lösung die Spaltendefinition einer Eingabedatei zu prüfen, unabhängig von ihrem Format, also ohne dass man einfach nur die 1. Zeile einliest?
Viele Grüße
Michael
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
die Lösung würde für den Excel Adapter „fast“ genauso funktionieren. Das Problem hier ist, dass die erste Zeile nicht komplett eingelesen werden kann. Hier müssen zuerst im ersten Verarbeitungsschritt die Spaltenüberschriften separat eingelesen werden.
Achtung: Hier nicht die Option „1. Zeile enthält Feldnamen“ auswählen!
Die so eingelesenen Excel Spaltennamen (Excel Spalten A, B, C, …) fügen Sie dann mit Hilfe des String Append Heater zu einer Zeichenkette zusammen, die dann über das oben erwähnte C# Skript geprüft werden kann. Im Anhang finden Sie ein kleines Beispiel dazu.
PS: Aktuell gibt es keine generelle Lösung dafür. Diese Funktion steht aber für eine spätere Version mit auf der TODO Liste. Termine dazu können aktuell noch nicht genannt werden.
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Michael Schaffert
- Autor
- Offline
- Benutzer
- Beiträge: 22
die Methode mit der Spaltenüberprüfung mittels C#-Skript hat sich in der Praxis wirklich gut bewährt, sowohl mit dem Text- als auch dem Excel-Adapter. Danke für Deine Hilfe!
Jetzt habe ich noch eine Frage zu einer Erweiterung dieser Methode:
Gibt es eine Möglichkeit, den Excel Adapter dazu zu bringen, leere Zeilen zu überspringen, und dann die erste Zeile mit Inhalt an das C# Skript zurückzuliefern?
Das Problem im Moment sind Excel-Dateien, bei denen die Spaltenüberschriften nicht in Zeile 1, sondern in Zeile 2 oder 3 stehen. Die darüberliegenden Zeilen sind leer.
Viele Grüße
Michael
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
wenn du die aktuellste Version einsetzt macht das der Excel Adapter automatisch. Hier wird solange gelesen bis keine komplett Leere Zeilen mehr gefunden werden, erst dann beginnt die Verarbeitung.
Wie viele Leerzeilen max. berücksichtigt bzw. überlesen werden sollen kannst du auf dem Reiter erweitert unter „Einlesen nach X Leerzeilen beenden“ einstellen.
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Michael Schaffert
- Autor
- Offline
- Benutzer
- Beiträge: 22
Vielen Dank für Deine schnelle Rückmeldung.
Ausprobiert, getestet, funktioniert. Perfekt!
Viele Grüße
Michael
Bitte Anmelden oder Registrieren um der Konversation beizutreten.