Logo.CortexAG

Anmelden +

Manueller csv-Import

Die manuelle Konfiguration für den Import von csv-Dateien besteht aus einer xml-Konfigurationsdatei für das Importprogramm "ImPlex". Diese Datei ist in mehrere Abschnitte unterteilt, um den Login zur Datenbank, das Lesen der Quellen ("Reader-Modul") und das Mapping zwischen Quelle und Ziel sicherzustellen. Der Aufbau dieser Konfigurationsdatei ist grundsätzlich für jeden Import gleich und unterscheidet sich dementsprechend nur in den jeweiligen Parametern für Quellen, Reader-Modul und Ziel-Mapping.

Wie bereits im Abschnitt für das ImPlex-Plugin erläutert, bestehen csv-Dateien aus Einzelwerten, die durch ein einheitliches Trennzeichen voneinander getrennt sind. Zudem werden die Einzelwerte häufig durch sog. "Feldbegrenzer" eingefasst.

Üblicherweise befinden sich in der ersten Zeile einer solchen Datei die Spaltenüberschriften (Feldbezeichner). Ist dieses nicht der Fall, ist in der Konfigurationsdatei im Abschnitt "ReaderModul“ der Wert für den "SpaltenModus“ zu ändern. Hier stehen die Möglichkeiten "HEADER“ (wenn die erste Zeile die Bezeichner enthält), "NUMERISCH“ oder "ABC“ zur Verfügung.

Beispiel einer csv-Datei (per Semikolon getrennte Werte):

„Name“;“Vorname“;“Ort“;“HobbyNr“;“Hobbies“
„Meier“;“Max“;“Hamburg“;“1,2“;“Fußball,Hockey“
„Müller“;“Sandra“;“Bielefeld“;“1,2“;“Tanzen,Reiten“

Beispiel einer csv-Datei (per Tab getrennte Werte):

„Name“    “Vorname“    “Ort“    “HobbyNr“    “Hobbies“
„Meier“    “Max“    “Hamburg“    “1,2“    “Fußball,Hockey“
„Müller“    “Sandra“    “Bielefeld“    “1,2“    “Tanzen,Reiten“

 

Reader-Modul für csv-Dateien

Das Beispiel einer csv-Datei zeigt zwei zu importierende Datensätze mit den jeweiligen Feldbezeichnern in der ersten Zeile. Der nachfolgende Abschnitt für den Bereich "ReaderModul“ zeigt daher die dazu passenden Konfigurationseinstellungen (für Semikolon-getrennte Werte):

<ReaderModul typ="csv">
    <Dateiname>/Data/import/2013Mai.csv</Dateiname>
    <FeldTrenner>;</FeldTrenner>
    <FeldBegrenzer>"</FeldBegrenzer>
    <WdhlTrenner>,</WdhlTrenner>
    <SpaltenModus>HEADER</SpaltenModus>
    <Charset>UTF-8</Charset>
</ReaderModul>

Beachten Sie, dass die Angabe des Dateinamens den absoluten Pfad zu der Datei beinhalten muss.

Weiterhin ist darauf zu achten, dass Sie den richtigen Zeichensatz ("Charset“) der Importdatei angeben. Ansonsten werden Umlaute nicht korrekt importiert. Hierfür stehen Ihnen drei Einstellungen zur Auswahl: UTF-8, windows-1251 und ISO-8859-1.

Werden für die Trennung der Werte anstatt Semikolons andere Zeichen verwendet, sind diese bei der Angabe <FeldTrenner> einzutragen. Der Spezialfall von Tabulatoren (Tab-Zeichen) erfordert die Nutzung des Ausdrucks {TAB}.

Beispiel Konfigurationsblock für Tab-getrennte Werte:

<ReaderModul typ="csv">
    <Dateiname>/Data/import/2013Mai.csv</Dateiname>
    <FeldTrenner>{TAB}</FeldTrenner>
    <FeldBegrenzer>"</FeldBegrenzer>
    <WdhlTrenner>,</WdhlTrenner>
    <SpaltenModus>HEADER</SpaltenModus>
    <Charset>UTF-8</Charset>
</ReaderModul>

 

Werden die bisher gezeigten Beispiele als Konfigurationsdatei zusammengefügt, stellt sich die xml-Datei wie folgt dar:

<?xml version="1.0" encoding="UTF-8"?>
<CtxImport>
  <Global>
    <LoginIP>127.0.0.1</LoginIP>
    <LoginPort>29001</LoginPort>
    <LoginUser>admin</LoginUser>
    <LoginPW>adm#13qzy2!</LoginPW>
    <ImportModus>nu</ImportModus>
</Global>
<ReaderModul typ="csv">
    <Dateiname>/Data/import/2013Mai.csv</Dateiname>
    <FeldTrenner>;</FeldTrenner>
    <FeldBegrenzer>"</FeldBegrenzer>
    <WdhlTrenner>,</WdhlTrenner>
    <SpaltenModus>HEADER</SpaltenModus>
    <Charset>UTF-8</Charset>
</ReaderModul>
<ImportSection datensatztyp="[.......]">
    [.......]
</ImportSection>
</CtxImport>

 

Import-Sektion für csv-Dateien

Innerhalb der "ImportSection“ legen Sie die Feldzuweisungen und Referenzen für den Import fest. Hier können Sie zudem Feldinhalte als Verlaufsinformation speichern und weitergehende Funktionen nutzen (z.B. Fallunterscheidungen anhand bestimmter Inhalte oder die Änderung von Inhalten definieren).

Zu dem oben aufgeführten csv-Beispiel kann die nachfolgende Import-Section dienen, wenn Datenbankfelder mit den Synonymen "perName", "perVorn" und "perAOrt" vorhanden sind:

<ImportSection datensatztyp="PERS">
    <Referenz>perName</Referenz>
    <Feld>perName=getChar('Name')</Feld>
    <Feld>perVorn=getChar('Vorname')</Feld>
    <Feld>perAOrt=getChar('Ort')</Feld>
</ImportSection>

Als Parameter für die "ImportSection“ wird das Kürzel des Datensatztyps festgelegt (in dem gezeigten Beispiel "PERS“). Die nachfolgenden Feldzuweisungen beziehen sich damit auf diese Satzart. Ggf. werden neue Datensätze angelegt, wenn anhand der Referenz kein Datensatz für eine Aktualisierung gefunden werden kann und der "ImportModus" auf "nu" oder "n" gesetzt wurde.

Wenn Sie vorhandene Datensätze aktualisieren möchten, ist es notwendig, dass Sie ein Referenzfeld angeben. Dieses legen Sie über den Eintrag "Referenz“ fest.

Alle weiteren Quellfelder weisen Sie dann einem Ziel zu, indem Sie für jede Zuweisung einen Eintrag "Feld“ erstellen. Die Zuweisung besteht dann immer aus Ziel = Quelle.

Beispiel:

<Feld>perName=getChar('Name')</Feld>

Bei diesem Beispiel wird dem Zielfeld "perName" der Wert aus dem Feld "Name" zugewiesen. Beachten Sie, dass die Quellefelder in jedem Fall mit der Funktion "getChar" umschlossen werden.

 

Nutzung von Funktionen

Für die Konfiguration stehen Ihnen mehrere Funktionen zur Verfügung mit deren Hilfe Sie die Inhalte beliebig ändern können. Eine komplette Übersicht erhalten Sie im Abschnitt "Importfunktionen". Das folgende Beispiel zeigt daher nur eine Auswahl der Möglichkeiten.

<ImportSection datensatztyp="PERS">
  <Referenz>perName</Referenz>
  <Feld>perName=getChar('Name')</Feld>
  <Feld>perVorn=getChar('Vorname')</Feld>
  <Feld>perAOrt=getChar('Ort')</Feld>
  <Feld>Quelle=file_woext(sourceFileName()</Feld>
  <Feld>perGes=iif(getChar('Vorname')== 'Max','M','W')</Feld>
  <Feld>perSuch=getChar('Vorname')+getChar('Name')</Feld>
</ImportSection>

Die abgebildeten Funktionen greifen auf verschiedene Daten zurück und erzeugen neue Informationen. Die Quelle wird so aus dem Dateinamen ohne Dateiendung gebildet (aus "2013Mai.csv“ wird so "2013Mai“). Ergänzend dazu wird per "iif“ eine Fallunterscheidung anhand des Vornamens durchgeführt. Im Falle von "Max“ erhält das Feld "perGes“ (für Geschlecht) den Wert "M“, ansonsten "W“. Ergänzend dazu werden die Quellefelder Vorname und Name zu einem Wert zusammengefügt und in das Feld "perSuch“ geschrieben.

Hinweis: Beachten Sie bei Rechenoperationen, dass die Quellwerte zuvor als numerische Werte deklariert werden müssen ("casting“). Dieses führen Sie beispielsweise mit den Funktionen "cint“ oder "cfloat“ durch. Auch für weitere Typen ist ggf. eine Anpassung durchzuführen (z.B. für die Umwandlung von Zahlen in Text).

 

Wiederholfelder und Wiederholfeldgruppen

In der Feldkonfiguration können Sie definieren, dass ein Feld mehrfach innerhalb eines Datensatzes gespeichert werden soll (z.B. Hobby oder eMail-Adresse). Diese sog. "Wiederholfelder" können zudem als eine Gruppe zusammengefasst werden (z.B. die Bankverbindung mit Konto, BLZ, IBAN,...). Die entsprechenden Daten können Sie daher auch über die Import-Funktion in die Datenbank aus einer Quelle einlesen.

In der oben gezeigten csv-Datei sind die Hobbies und eine Nummer der Hobbies ersichtlich, die zusammen eine Wiederholfeldgruppe bilden und entsprechend konfiguriert werden müssen. Die Nummer und die Bezeichnung der Hobbies sollen nun als Wiederholfeldgruppe in die Satzart der Person importiert werden. Dafür ergänzen Sie die "ImportSection“ um folgende Angaben:

<WiederholGruppe>
  <Feld>HobNr  = getChar('HobbyNr')</Feld>
  <Feld>HobBez = getChar('Hobbies')</Feld>
</WiederholGruppe>

Damit werden jeweils die erste Angabe der Nummer und des Hobbies als eine Gruppe definiert; dann je die zweiten Angaben usw. Im Falle eines einzelnen Wiederholfeldes ohne weitere Gruppierung schreiben Sie das einzelne Feld in die Wiederholfeldgruppe.

<WiederholGruppe>
  <Feld>HobBez = getChar('Hobbies')</Feld>
</WiederholGruppe>

Somit können Sie auch mehrere Wiederholfelder und Wiederholfeldgruppen in einem Datensatz aufnehmen.

Hinweis:

Eine Gruppe von Feldern kann aktualisiert werden, wenn eine Referenz auf ein führendes Feld vorliegt und es kann die Gruppe gelöscht werden, die nicht mehr in der Quelle vorhanden ist.

Hierfür ist eine Erweiterung des oben genannten Beispiels notwendig

<WiederholGruppe referenz="1">
  <Feld deltaliste="d">HobNr  = getChar('HobbyNr')</Feld>
  <Feld>HobBez = getChar('Hobbies')</Feld>
</WiederholGruppe>

Das Attribut "referenz" aktiviert die Referenzierung der Gruppe. Hierbei gilt immer das erste Feld als Referenzfeld, um die Gruppe zu aktualisieren.

Das Attribut "deltaliste" legt fest, dass der Eintrag in der Datenbank vorhanden sein muss! Es werden also alle Informationen aus der Quelle importiert und die Einträge aus der Datenbank entfernt, die nicht in der Quelle vorhanden sind.

Vorsicht! - Die Kombination aller Attribute kann möglicherweise unbedachte Änderungen nach sich ziehen. Ein vorheriger Test ist daher empfehlenswert.

 

Vollständiges Beispiel der oben gezeigten Konfiguration für den csv-Import

Werden die bisher gezeigten Beispiele als Konfigurationsdatei zusammengefügt, stellt sich die xml-Datei wie folgt dar:

<?xml version="1.0" encoding="UTF-8"?>
<CtxImport>
  <Global>
    <LoginIP>127.0.0.1</LoginIP>
    <LoginPort>29001</LoginPort>
    <LoginUser>admin</LoginUser>
    <LoginPW>adm#13qzy2!</LoginPW>
    <ImportModus>nu</ImportModus>
  </Global>
  <ReaderModul typ="csv">
    <Dateiname>/Data/import/2013Mai.csv</Dateiname>
    <FeldTrenner>;</FeldTrenner>
    <FeldBegrenzer>"</FeldBegrenzer>
    <WdhlTrenner>,</WdhlTrenner>
    <SpaltenModus>HEADER</SpaltenModus>
    <Charset>UTF-8</Charset>
  </ReaderModul>
  <ImportSection datensatztyp="PERS">
    <Referenz>perName</Referenz>
    <Feld>perName=getChar('Name')</Feld>
    <Feld>perVorn=getChar('Vorname')</Feld>
    <Feld>perAOrt=getChar('Ort')</Feld>
    <Feld>Quelle=file_woext(sourceFileName()</Feld>
    <Feld>perGes=iif(getChar('Vorname')== 'Max','M','W')</Feld>
    <Feld>perSuch= getChar('Vorname')+getChar('Name')</Feld>
    <WiederholGruppe referenz='1'>
      <Feld>HobNr  = getChar('HobbyNr')</Feld>
      <Feld>HobBez = getChar('Hobbies')</Feld>
    </WiederholGruppe>
  </ImportSection>
</CtxImport>

 

 

 

 Hinweise zur Online-Hilfe
 

© 2017 Cortex AG
(letzte Aktualisierung: 12.04.2017)

 Haftungsausschluss 

Impressum    AGB