- Beiträge: 2
CSV-Zeile mit sehr vielen identischen Spalten auf mehrere Zeilen verteilen
- Jost Broichmann
- Autor
- Offline
- Benutzer
Weniger
Mehr
4 Jahre 10 Monate her - 4 Jahre 10 Monate her #3858
von Jost Broichmann
CSV-Zeile mit sehr vielen identischen Spalten auf mehrere Zeilen verteilen wurde erstellt von Jost Broichmann
Ich habe eine Datenquelle die CSV Dateien mit sehr langen Zeilen auswirft. Es handelt sich um Messeinrichtungen, die zu einem Zeitpunkt Messwerte in eine Zeile schreiben. Die Spalten wiederholen sich, gekennzeichnet wird eine neue Messeinrichtung durch eine neue Anlagennummer.
Prinzipiell sehen die Daten wie folgt aus:
Date;Time;ID;WertA;WertB;WertC;ID;WertA;WertC;WertD;ID;WertA;WertB;WertC
25.11.19;19:30;1;11;12;13;2;21;23;24;3;31;32;33
Ziel ist ein Import in SQL, da kann jede Spalte nur 1x vorkommen, die Zeilen ergeben sich aus den Anlagen-IDs
DateTime;ID;WertA;WertB;WertC;WertD
19-11-25 19:30;1;11;12;13;Null
19-11-25 19:30;2;21;Null;23;24
19-11-25 19:30;3;31;32;33;Null
Die DateTime-Umrechung bekomme ich hin, die sortierte Aufteilung auf mehrere Zeilen nicht. Über einen Tipp wäre ich dankbar.
Prinzipiell sehen die Daten wie folgt aus:
Date;Time;ID;WertA;WertB;WertC;ID;WertA;WertC;WertD;ID;WertA;WertB;WertC
25.11.19;19:30;1;11;12;13;2;21;23;24;3;31;32;33
Ziel ist ein Import in SQL, da kann jede Spalte nur 1x vorkommen, die Zeilen ergeben sich aus den Anlagen-IDs
DateTime;ID;WertA;WertB;WertC;WertD
19-11-25 19:30;1;11;12;13;Null
19-11-25 19:30;2;21;Null;23;24
19-11-25 19:30;3;31;32;33;Null
Die DateTime-Umrechung bekomme ich hin, die sortierte Aufteilung auf mehrere Zeilen nicht. Über einen Tipp wäre ich dankbar.
Letzte Änderung: 4 Jahre 10 Monate her von Jost Broichmann. Begründung: Word-Formatierung
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
4 Jahre 10 Monate her #3859
von FlowHeater-Team
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.
FlowHeater-Team antwortete auf CSV-Zeile mit sehr vielen identischen Spalten auf mehrere Zeilen verteilen
Hallo Herr Broichmann,
um aus einer CSV Zeile mehrere Zeilen oder aber Datensätze zu generieren benötigen Sie einmal den GroupOut Heater . Dieser kopiert die aktuelle READ Zeile n-Mal. Wenn wie in Ihrem Beispiel 3x Wertepaare vorhanden sind müssen Sie für n=2 verwenden, so dass diese Zeile insgesamt 3x verarbeitet wird. 1x Original + 2 Kopien. Der Wert wird einfach statisch über einen X-Value Heater übergeben.
Dann benötigen Sie einen AutoID Heater . Diesen müssen Sie so konfigurieren, dass hiermit die kopierten bzw. gruppierten CSV Zeilen gezählt werden. Hierzu müssen Sie die Option „GroupOut“ aktivieren, siehe Screenshot.
Dann wird es etwas mühselig. Jetzt müssen Sie noch entscheiden, dass beim originalen Datensatz (AutoID Zähler = 1) die ersten Werte verwendet werden, beim zweiten Datensatz (AutoID Zähler = 2) die zweiten Werte, usw.
Hierzu habe ich im angehängten Beipspiel einen .NET Script Heater mit unten stehen C# Skript verwendet. Der .NET Script Heater erhält als ersten Eingangsparameter den Wert des oben eingefügten AutoID Heaters . Zusätzliche fügen Sie hier alle ID Werte hinzu. Achtung hier müssen Sie die Reihenfolge einhalten so wie diese in der CSV Datei vorhanden sind. Also erster ID Wert, zweiter ID Wert, dritter ID Wert, usw. Das Skript gibt dann je nach Verarbeitung den richtigen Wert zurück. Sie benötigen für jedes Ausgabefeld auf der WRITE Seite einen separaten .NET Script Heater . Das Vorgehen sowie das Skript sind dann immer gleich.
Klingt etwas kompliziert. Ich denke, wenn Sie sich das angehängte Beispiel dazu ansehen wird etwas einfacher zu verstehen sein.
C# Skript um die richtigen Wertepaare auszugeben
um aus einer CSV Zeile mehrere Zeilen oder aber Datensätze zu generieren benötigen Sie einmal den GroupOut Heater . Dieser kopiert die aktuelle READ Zeile n-Mal. Wenn wie in Ihrem Beispiel 3x Wertepaare vorhanden sind müssen Sie für n=2 verwenden, so dass diese Zeile insgesamt 3x verarbeitet wird. 1x Original + 2 Kopien. Der Wert wird einfach statisch über einen X-Value Heater übergeben.
Dann benötigen Sie einen AutoID Heater . Diesen müssen Sie so konfigurieren, dass hiermit die kopierten bzw. gruppierten CSV Zeilen gezählt werden. Hierzu müssen Sie die Option „GroupOut“ aktivieren, siehe Screenshot.
Dann wird es etwas mühselig. Jetzt müssen Sie noch entscheiden, dass beim originalen Datensatz (AutoID Zähler = 1) die ersten Werte verwendet werden, beim zweiten Datensatz (AutoID Zähler = 2) die zweiten Werte, usw.
Hierzu habe ich im angehängten Beipspiel einen .NET Script Heater mit unten stehen C# Skript verwendet. Der .NET Script Heater erhält als ersten Eingangsparameter den Wert des oben eingefügten AutoID Heaters . Zusätzliche fügen Sie hier alle ID Werte hinzu. Achtung hier müssen Sie die Reihenfolge einhalten so wie diese in der CSV Datei vorhanden sind. Also erster ID Wert, zweiter ID Wert, dritter ID Wert, usw. Das Skript gibt dann je nach Verarbeitung den richtigen Wert zurück. Sie benötigen für jedes Ausgabefeld auf der WRITE Seite einen separaten .NET Script Heater . Das Vorgehen sowie das Skript sind dann immer gleich.
Klingt etwas kompliziert. Ich denke, wenn Sie sich das angehängte Beispiel dazu ansehen wird etwas einfacher zu verstehen sein.
C# Skript um die richtigen Wertepaare auszugeben
Code:
public object DoWork()
{
// AutoID Zähler holen = ersten Eingangsparameter
int i = (int)InValues[0].GetInt();
// den richtigen Wert anhand der Eingangsreihenfolge zurückliefern
return InValues[i];
}
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.
- Jost Broichmann
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 2
4 Jahre 10 Monate her #3860
von Jost Broichmann
Jost Broichmann antwortete auf CSV-Zeile mit sehr vielen identischen Spalten auf mehrere Zeilen verteilen
Hallo Herr Stark,
vielen Dank! Ich habe das in der Zwischenzeit mit mehreren InMemory-Adaptern in der Write-Seite probiert, die im 2. Schritt in SQL geschrieben werden. Geht auch, ist aber ein ziemliches Geklicke und evtl. fehleranfälliger, als ein paar saubere Zeilen Code.
vielen Dank! Ich habe das in der Zwischenzeit mit mehreren InMemory-Adaptern in der Write-Seite probiert, die im 2. Schritt in SQL geschrieben werden. Geht auch, ist aber ein ziemliches Geklicke und evtl. fehleranfälliger, als ein paar saubere Zeilen Code.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.278 Sekunden