FlowHeater Demo Video
 
FlowHeater - The Data Import / Export Specialist
 
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
×

Erweiterte Suche

Suche nach Stichwort
×

Suchoptionen

Finde Beiträge von
Ergebnisse sortieren nach
Suche zu einem bestimmten Zeitpunkt
Zu Resultat springen
Suche in Kategorien
×

Suchergebnis

Gesucht wurde: string append heater
14 Feb 2019 19:05
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo HerrStelling,

ich gehe mal davon aus, dass Sie weiter keine Änderungen an den CSV Spalten bzw. den Inhalten vornehmen möchten? Der einfachste Fall mehrere CSV Zeilen, anhand eines Kennzeichens, zu einer Ausgabezeile zusammenzufassen ist folgender Trick.

Sie lesen auf der READ Seite die CSV Datei als ganze Zeile ein und ignorieren die einzelnen Spalten. Hierzu wählen Sie im TextFile Adapter , auf dem Reiter „Trennzeichen“ ein Spaltentrennzeichen, das in der Textdatei so nicht vorkommt. Im Beispiel, siehe Anhang, habe ich die Zeichen „###“ in Kombination verwendet. So liest der TextFile Adapter jede Zeile als eine Spalte ein.

Jetzt benötigen Sie den String Split Heater um die Zeile wieder in separate Spalten aufzuteilen um das Kriterium, anhand die Zeilen zusammengefasst werden sollen herauszufiltern. Im Beispiel ist das die zweite Spalte. Dieser Wert wandert zum GroupBy Heater , der alle gleichen Werte (der zweiten Spalte) zu einer Ausgabezeile zusammenfasst.

Zum Schluss benötigen Sie noch den String Append Heater , mit Auswirkung auf GroupBy und schon sind mehrere CSV Zeilen der READ Seite zu einer CSV Zeile WRITE Seite zusammengefasst. Im String Append Heater müssen Sie noch das normale CSV Trennzeichen angeben, das verwendet werden soll um die Zeilen miteinander zu verknüpfen.

Müssen die einzelnen CSV Spalten vorher noch bearbeitet / angepasst werden geht das natürlich auch, ist nur ein wenig komplizierter.



Dateianhang:

Dateiname: csv-zeilen...eren.zip
Dateigröße:2 KB
Kategorie: TextFile Adapter
05 Jan 2019 12:39
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Schauerte,

das können Sie mit dem AutoID Heater durchführen.  Hier müssen Sie lediglich die Option „Gleiche Eingangsparameter -> Alle gleichen Werte“ aktivieren, das war´s.

Um den aktuell gezählten Wert an die Artikelnummer zu hängenbenötigen Sie noch den String Append Heater . Zusätzlich wurde hier noch der String Format Heater verwendet um bei Werten ab 1000 das Tausendertrennzeichen zu unterdrücken!

Im Anhang finden Sie ein kleines Beispiel dazu.



Dateianhang:

Dateiname: gleiche-we...hlen.zip
Dateigröße:2 KB
Kategorie: MySQL Adapter
29 Dez 2018 09:48
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Schauerte,

am einfachsten wird es sein, wenn Sie dazu ein kleines Skript für den .NET Script Heater verwenden. Ich habe Ihnen das Skript soweit vorbereitet, siehe unten. Sie müssen im Skript lediglich die maximale Länge pro Spalte/Feld eintragen. Anhand dieser Angabe fügt das Skript in die übergebene Zeichenfolge jeweils ein Trennzeichen "-#-" an der Position der Teilzeichenkette ein die die Maximale Länge wiederspiegelt. Falls das verwendete Trennzeichen "-#-" bei Ihnen in den Zeichenfolgen vorkommen kann, ggf. ein anderes Trennzeichen verwenden.

Das Skript bzw. der .NET Script Heater erfordert einen Eingabeparameter mit der Zeichenfolge die dann mit dem Trennzeichen präpariert werden soll. Hierzu verwenden Sie den String Append Heater um die 5 ODBC Felder miteinander zu einer Zeichenfolge zu verbinden. Als Trennzeichen verwenden Sie hier ein Leerzeichen.

Um die so präparierte Zeichenfolge nun auf die 3 Spalten/Felder der MySQL WRITE Seite aufzuteilen benötigen Sie 3x den String Split Heater , der die Zeichenfolgen anhand des Trennzeichen „-#-“ in drei Teile aufteilt. Hinweis: Wenn Sie die Option „Warnung generieren, wenn Rückgabespalte größer als verfügbare Spalten“ deaktivieren, wird keine Warnung ausgegeben falls mal eine kürzere Zeichenfolge vorhanden sein sollte.

Im Anhang finden Sie ein kleines Beispiel dazu.

Dateianhang:

Dateiname: skript-str...plit.zip
Dateigröße:3 KB
Kategorie: MySQL Adapter
30 Okt 2018 06:02
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Seiffert,

Sie müssen im zweiten String Append Heater (siehe Screenshot und Markierung) die GroupBy Option aktivieren. So wird hinter dem Heater die gescheifte Klammer angezeigt.

PS: Anscheinend stimmt Ihre Auswahl der Codepage nicht, Umlaute werden nicht richtig angezeigt! Versuchen Sie mal auf der READ Seite UTF8 oder aber CP 1252 zu verwenden.

Kategorie: TextFile Adapter
29 Okt 2018 06:12
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Seiffert,

das können Sie über einen weiteren String Append Heater , der zuerst die 2 Spalten der Zeile zusammenfasst. Der zweite String Append Heater fasst dann die Werte der gruppierten Zeilen zusammen, siehe Beispiel im Anhang.



Dateianhang:

Dateiname: csv-lookup...0-29.zip
Dateigröße:2 KB
Kategorie: TextFile Adapter
26 Okt 2018 05:24
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Seiffert,

Sie müssen die CSV Lookup Datei bereits so erzeugen, dass hier die zusammengefasst werden. Das können Sie über den GroupBy Heater zusammen mit dem String Append Heater durchführen. Im Anhang finden Sie ein kleines Beispiel dazu.

Hinweis: Die Datenquelle muss dazu sortiert sein! Evtl. vorher mit dem Sort Heater sortieren.

Dateianhang:

Dateiname: csv-lookup...ssen.zip
Dateigröße:2 KB
Kategorie: TextFile Adapter
22 Okt 2018 08:37
  • Andre Seiffert
  • Andre Seifferts Avatar
Ich habe eine Datanorm dessen Spalten mit verschiedenen Sätzen markiert sind. Nicht zu berücksichtigende Sätze habe ich mit einem If-Then-Else Heater und einem Filter ausgeblendet. Ich habe folgende Ausgangslage:

Spaltenüberschriften Write-Seite: Satz;HAN;Kurztext1;Kurztext2;Preiseinheit;Mengeneinheit;Preis;Preistyp;Rabattgruppe;Langtext;Langtext_Satz;EAN

Zeile 1 Read Seite: A;0120708;Artikel 1 kurztext1; Artikel 1 kurztext2;0;ST;651,00;Bruttopreis;;;;
Zeile 2 Read Seite: B;0120708;;;0;0;40.280.630.015,32;0;;;;4123463001532

Von der Spalte B möchte ich jetzt das Feld EAN (also hier den Wert 4123463001532) in die 1 Zeile pro Artikel geschrieben haben. Leider erstellt der FlowHeater derzeit eine 2. Zeile für den identischen Artikel. Vermutlich muss der String Append Heater verwendet werden. Das bekomme ich leider nicht hin.

Wer kann helfen?
Kategorie: TextFile Adapter
02 Jul 2018 18:04
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Seiffert,

Um Bedingungen mit dem IF-THEN-ELSE Heater mit zwei Eingangsparameter vergleichen zu können müssen Sie einen kleinen Workaround anwenden.

Am einfachsten geht es wenn Sie die zwei Parameter vorher über einen String Append Heater vorher miteinander kopieren und dann in der Bedingung den kombinierten Wert vergleichen.

z.B. =99991231#net_list (hier wurde zusätzlich im String Append Heater das Zeichen # als Trennzeichen verwendet.

So geht es eigentlich relativ einfach. Im Anhang habe ich Ihnen ein kleines Beispiel basierend auf Ihre beigefügte XML Datei erstellt.

Allerdings gibt es hier ein kleines Problem. Sie wissen nicht wie viele Produktpreis Knoten in der XML Datei vorhanden sind. Im Beispiel habe ich jetzt mal die 6 Produktpreis verglichen die im ersten Artikel vorhanden sind. Würden jetzt 7 Preise zu einem Artikel geliefert würde der 7. (Preis)knoten nicht in die Verarbeitung mit einfließen, da der FlowHeater momentan XML Unterknoten nicht dynamisch lesen kann! Das sind derzeit leider die Grenzen bei der FlowHeater XML Verarbeitung auf der READ Seite.

Dateianhang:

Dateiname: xml-read.zip
Dateigröße:39 KB
Kategorie: Allgemein
15 Jan 2018 18:51
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Kober,

es gibt natürlich eine schlanke Lösung :) Der FlowHeater kann Problemlos CSV Daten gruppieren und den über mehrere Felder gruppierten Inhalt, getrennt durch Zeilenumbrüche, in ein separates Excel Feld Importieren. Im Anhang finden Sie ein kleines Beispiel.

Vorgehensweise
Sie benötigen dazu einen Sort Heater , nur falls die CSV Datenquelle nicht sortiert vorliegt.

Dann wird noch der GroupBy Heater benötigt um alle CSV Zeilen für die Excel Ausgabe zusammenzufassen. Im Beispiel verwende ich die CSV Felder „Nutzer“ und „ID“ für die Gruppierung der CSV Eingabedatei. Hinweis: Der GroupBy Heater benötigt für eine sortierte Datenquelle!

Feldmapping
Das Feld Nutzer wird 1:1 mit dem Excel Adapter verbunden. Um nun alle Kommentare zum Nutzer in ein separates Feld pro Nutzer zu schreiben benötigen zusätzlich einen String Replace Heater mit aktivierter „GroupBy“ Option. Hinweis: Die Option kann über das Kontextmenü des Heaters aktiviert werden!

Als Trennzeichen muss hier eine Zeichenkombination verwendet werden, die im normalen Text nicht vorkommt. Im Beispiel wurde „###“ verwendet. Hiermit werden alle Kommentare zu einem Nutzer zu einer einzeiligen Zeichenkette, getrennt durch „###“ zusammengefügt.
z.B. Kommentar 1###Kommentar 2###Kommentar …

Zum Schluss ersetzen wir dann noch mittels des String Replace Heater die temporären Trennzeichen „###“ jeweils durch einen Zeilenumbruch.



Dateianhang:

Dateiname: csv-excel-...eren.zip
Dateigröße:2 KB
Kategorie: Allgemein
13 Jan 2018 11:43
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Schanzel,

im Anhang finden Sie ein kleines Beispiel wie Sie das mit dem TextFile Adapter umsetzen können. Das Datum wird hier über mehrere Heater dynamisch gebildet.

Zuerst wird der Monat (1, 2, …) anhand des Namens (Januar, Februar, …) über eine CSV Ersetzungsliste mit Hilfe des String Replace Heater ermittelt. Anschließend wird er Wert über den String Append Heater zusammen mit der Jahreszahl und einem Statischen Wert ( X-Value Heater ) zu einem Datum zusammengefügt.

Dateianhang:

Dateiname: beispiel.zip
Dateigröße:2 KB
Kategorie: TextFile Adapter
08 Jul 2017 11:06
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Matthias,

wenn deine Datenbasis einen Auto Inkrement Zähler oder aber eine Datumsfeld mit dem Erzeugungsdatum des Datensatzes hat ist das relativ einfach über FlowHeater Parameter und einem dynamischen SQL Statement auf der READ Seite umzusetzen.

z.B. SELECT * FROM tabellen_name WHERE ID > $LASTID$

so werden nur die seit der letzten Ausführung hinzugekommen Datensätze exportiert und verarbeitet.

So wie ich deine Frage verstehe ist bei Dir das aber nicht der Fall. Das unterstützt der FlowHeater noch nicht direkt, hierzu müsste ein kleines Skript für den .NET Script Heater verwendete werden.

Das Skript merkt sich die bereits verarbeiteten Datensätze anhand der dem Heater übergeben Eingangswerte. Diese Werte werden als Primary Key interpretiert und für die weitere Verwendung in einer separaten Textdatei (=Name = Name der Definition + Dateiendung .key) permanent gespeichert.
Wird die Definition ausgeführt liest das Skript diese Datei in eine interne HashTable ein um die bereits verarbeiteten Primary Key Werte zu erhalten. Pro Datensatz prüft dann das Skript ob dieser Schlüssel bereits verarbeitet wurde. Falls ja wird der Datensatz mittels des Filter Heater gefiltert, falls nein wird der Schlüssel in die Key/Schlüsseldatei für die weitere Verwendung weggeschrieben und der Datensatz wird anschließend ganz normal verarbeitet (nicht gefiltert).

Hinweis: Über diesen Mechanismus werden/müssen immer aller Daten der READ Seite verarbeitet werden. Besser bzw. performanter wäre es die Datenmenge bereits am SQL Server einzuschränken. Das ist natürlich nicht immer möglich!

Getestet wurde das Skript mit 1.000.000 Datensätzen auf der READ Seite. Die initiale Verarbeitung aller 1.000.000 Datensätze dauerte ca. eine Stunde. Ein anschließendes hinzufügen lediglich eines Datensatzes lief dann innerhalb einer Minute durch!

Im Anhang findest du eine kleines Beispiel, hier allerding nicht SQL-Server bezogen sondern mit einfachen CSV Textdateien realisiert.

C# Skript um nur neue hinzugekommene Datensätze zu verarbeiten
string keyfile = String.Empty;
Hashtable keys = new Hashtable();

public object DoWork()
{
  if (keyfile.Length == 0)
  {
    // KeyFile anlegen, gleicher Dateiname wie Definition, Dateiendung = .key
    keyfile = Path.GetFileNameWithoutExtension(AdapterRead.Definition.Flow.FileName) + ".key";
		
    // bereits vorhandene Schlüssel einlesen
    if (File.Exists(keyfile))
    {
      StringReader reader = new StringReader(File.ReadAllText(keyfile));
      while(true)
      {
        string line = reader.ReadLine();
        if (line == null)
          break;

        keys.Add(line, null);
      }
    }
  }

  // Key/Schlüssel zusammenbauen
  string key = String.Empty;
  for (int i = 0; i < InValues.Length; i++)
  {
    if (key.Length != 0)
      key += " | ";

    if (InValues[i].GetValue() == null || InValues[i].GetValue() == DBNull.Value)
      key += "-null-";
    else
      key += (string)InValues[i].GetString();
  }

  // Prüfen ob Key/Schlüssel bereits verarbeitet wurde
  if (!keys.ContainsKey(key))
  {
    // Key/Schlüssel noch nicht vorhanden, in Keyliste aufnehmen
    keys.Add(key, null);
    
    // nicht im Testmodus an Datei anfügen!
    if (!TestMode)
      File.AppendAllText(keyfile, key + Environment.NewLine);

    // noch nicht vorhanden, dieser Datensatz muss verarbeitet werden
    return false;
  }

  // Diesen Datensatz filtern
  return true;
}

Dateianhang:

Dateiname: nur-neue-d...iten.zip
Dateigröße:3 KB
Kategorie: Allgemein
04 Jun 2017 07:31
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Ankenbrand,

um lediglich alle Zeilen einer „unstrukturierten Textdatei in eine Spalte auf der WRITE Seite zusammenzuführen müssen Sie anders vorgehen.
Im Textfile Adapter auf der READ Seite wählen Sie auf dem Reiter „Trennzeichen“ die Option „Anderes“ und geben als Spaltentrennzeichen mehrere Zeichen ein die so in der Textdatei nicht erwartet werden. Ich habe im Beispiel „####“ verwendet. So liest der FlowHeater jede Zeile in nur einer Spalte ein. Das CSV Trennzeichen wird so ignoriert!

Um jetzt alle Zeilen der READ Seite zu einer Zeile und Spalte auf der WRITE Seite zuzuordnen benötigen Sie einen GroupBy Heater . Diesen übergeben Sie über den X-Value Heater einen beliebigen statischen Wert. So werten alle Zeilen zu einer zusammengefasst. Um jetzt noch den Inhalt der Zeilen mit einem Trennzeichen getrennt in das Ausgabefeld zu schrieben benötigen Sie noch einen String Append Heater mit eingeschalteter GroupBy Option. Im Anhang finden Sie ein kleines Beispiel.



Dateianhang:

Dateiname: zeilenumbr...rnen.zip
Dateigröße:2 KB
Kategorie: Allgemein
02 Jun 2017 05:26
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Fertac,

das geht leider nicht über einen Bearbeitungsschritt. Sie benötigen zwei String Replace Heater , die jeweils einen CSV Lookup auf zwei unterschiedliche CSV Dateien durchführt. Die CSV Listen müssen einmal aufsteigend und einmal absteigend sortiert sein. Das Ergebnis daraus können Sie über einen String Append Heater zusammenführen.
Kategorie: TextFile Adapter
09 Mai 2017 19:39
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Heuser,

das liegt daran dass der FlowHeater die Excel Werte als „Standard“ setzt. Hier greift dann die Excel Logik und denkt, dass es sich bei dem Wert bzw. Namen True um einen booleschen Wert handelt und gibt diesen dann ins Deutsche übersetzt aus.

Sie können das derzeit verhindern indem Sie dem Feld ein Apostroph Zeichen mit Hilfe des String Append Heater voranstellen. Im Anhang finden Sie ein kleines Beispiel zur Demonstration.

Ich denke mit der nächsten Version wird es hier eine etwas elegantere Lösung geben.


Dateianhang:

Dateiname: excel-true-false.zip
Dateigröße:1 KB
Kategorie: Allgemein
24 Mär 2017 06:09
  • FlowHeater-Team
  • FlowHeater-Teams Avatar
Hallo Herr Birk,

ja das liegt am Memory Modus, hier ist es etwas anders ;) Ich habe das jetzt so angepasst, dass für den Datensatzzähler ein Parameter ROWSWRITE verwendet wird. Dieser wird über den AutoID Heater gesetzt. Hier wurde die Option „gefilterte Datensätze/Zeilen ignorieren“ verwendet. So funktioniert es unter beiden Ausführungen und es werden nur die auf der WRITE Seite verarbeiteten Datensätze gezählt. In der Anlage finden Sie eine Beispiel Definition.

@Junge Software: Das Skript wurde angepasst, so dass separat der Pfad zur Protokolldatei angepasst werden kann, siehe Kommentare im Skript.


C# Skript
public object DoWork()
{
  // hier evtl. das gewünschte CSV Trennzeichen anpassen
  string trennzeichen = ";";

  // hier den Ausgabepfad der Protokolldatei ändern.
  // im Beispiel wird das aktuelle Verzeichnis der Definition verwendet.
  // es gehen auch ansolute Pfadangaben wie @"C:\Temp\und\so\weiter"
  string pfad = @".\";
 
  string protokoll = Path.Combine(pfad, String.Format("protokoll_{0}.log", DateTime.Now.ToString("yyyyMM")));

  StringBuilder sb = new StringBuilder();

  // aktuelles Datum und Uhrzeit
  sb.Append(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
  sb.Append(trennzeichen);

  // aktueller Dateiname der im TextFile Adapter auf der READ Seite verarbeitet wird
  sb.Append(AdapterWrite.ReplaceParameter(((TextFileAdapter)AdapterWrite).Filename));
  sb.Append(trennzeichen);

  // im WRITE Adapter verarbeitetet Datensätze
  sb.Append(Parameter["ROWSWRITE"].GetInt());

  // Zeilenumbruch anfügen
  sb.Append(Environment.NewLine);

  // An die Protokolldatei anfügen oder neu erzeugen
  File.AppendAllText(protokoll, sb.ToString());

  // Rückgabewert wird bei "Ausführen bei Ende" nicht benötigt!
  return null;
}

Dateianhang:

Dateiname: protokoll.zip
Dateigröße:2 KB
Kategorie: Allgemein
1 - 15 von 90 Ergebnissen angezeigt.

andere Sprachen

en

FlowHeater Home

de en

Impressum/Kontakt

Datenschutz

Copyright © 2009-2019 by FlowHeater GmbH.
Alle Rechte vorbehalten.

Follow us on

twitter  facebook

YouTube

 de en