Konfiguration

In der Konfiguration werden alle Einstellungen vorgenommen um Vergleichsreports für unterschiedliche Dateien zu erstellen. Zentral ist hier der Begriff Target, der alle Einstellungen für einen bestimmten Dateivergleich zusammenfasst. Im folgenden Beispiel ist ein Target TestReport1 im letzten Abschnitt konfiguriert. Der Name des Target steht dabei in eckigen Klammern.

[DEFAULT]
numberFormat=EN
newFormat=CSV

[GLOBAL]
resultFormats=CSV
oldDirectory=test/data/old/
newDirectory=test/data/new/
resultDirectory=test/data/result/

[TestReport1]
oldFilePath=Report1_v1.0.xls
newFilePath=Report1_v2.0.csv
oldFormat=XLS
newFormat=CSV
oldKeyColumns=1
newKeyColumns=1

Der Abschnitt nach dem Target Namen definiert die Parameter für diesen bestimmten Vergleich. In diesem Fall werden zwei Dateien Report1_v1.0.xls und Report1_v2.0.csv verglichen, welche unterschiedliche Dateiformate besitzen.

Um nicht immer alle Einstellungen in jedem Target neu definieren zu müssen, können Standardwerte im Abschnitt DEFAULT gesetzt werden. Im obigen Beispiel könnte man den newFormat Parameter im Abschnitt TestReport1 weg lassen, da dieser schon im DEFAULT Abschnitt definiert wurde.

Einige wenige Parameter gelten global und können nicht in einem bestimmten Target überschrieben werden. Diese Parameter werden im Abschnitt GLOBAL definiert.

Um NCDiff mit einer Konfigurationsdatei ausführen, muss diese mit dem Parameter --configurations auf der Kommandozeile spezifiziert werden. Um zum Beispiel alle Targets der Konfigurationsdatei regression-test.cfg auszuführen:

ncdiff --configurations regression-test.cfg

Parameter

Für alle Parameter gelten folgende Regeln:

  • Für den Vergleich wurde der Use-Case Regression Test herangezogen. Deshalb gibt es immer (wo es Sinn macht) einen Parameter für eine alte und eine neue Datei. Zum Beispiel: oldColumnNames und newColumnNames

  • Listen werden immer mit Beistrich/Komma getrennt.

  • Bei Listen von Listen wird die Sub-Liste mit Strichpunkt/Semikolon getrennt.

  • Mappings werden durch Doppelpunkt getrennt.

  • Bei numerischen Werten wird immer der Punkt als Dezimaltrennzeichen verwendet.

  • Zeilen- und Spaltennummern beginnen immer bei 1.

  • Spaltennummern können auch negativ sein. Die Nummer -1 entspricht dann der letzten Splaten, die -2 der vorletzten und so weiter.

  • Als Spaltennummern können alternativ die Excel Spaltennamen verwendet werden oder auch Spaltennamen der Datei falls diese eine Headerzeile besitzt (old/newHasHeader=True), oder Spaltennamen explizit mittels old/newColumnNames gesetzt wurden.

  • An einigen Stellen ist es möglich Filterregeln oder Einschränkungen zu definieren. Details hierzu sind in Filterregeln und Einschränkungen dokumentiert.

Parameterliste

absoluteColumnsTolerances

Type

Target

Wert

Map von Filterregeln und/oder Spaltennummern und Toleranz Paaren

Default
Inhalt

Definiert die absolute Toleranz für eine bestimmte Spalte. Dieser Wert überschreibt den Wert des globalen Parameters absoluteTolerance für die definierte Spalte.

Beispiel

absoluteColumnsTolerances=5: 0.5,
  6: 0.6,
  7: if(contains(@2, 'STOCK'); 30.0;
     if(contains(@2, 'OPTION'); 50.0))

Bedeutet, dass bei Spalte 5 die Werte um 0.5, bei Spalte 6 um 0.6 absolut abweichen dürfen. Die Werte in Spalte 7 dürfen um 30 absolut abweichen, wenn Spalte 2 den Wert „STOCK“ enthält und um 50 absolut, wenn Spalte 2 den Wert „OPTION“ enthält.

absoluteTolerance

Type

Target

Wert

Float Wert

Default

0.0

Inhalt

Abweichung, die ein Wert in der Neuen Datei im Vergleich zur Alten abweichen darf. Jede Differenz die größer ist als dieser Wert wird im Ergebnisreport ausgewiesen.

Beispiel

absoluteTolerance=0.1

oldColumnFormats, newColumFormats, bothColumnFormats

Type

Target

Wert

Liste von Spaltennummern-Mappings auf Datentyp und Format

Default
Inhalt

Zur Angabe eines Datentyps ggf. mit Format für die jeweilige alte Spalte. Damit können z.B. unterschiedliche Datumsformate zwischen den beiden Inputdateien verglichen werden.

Beispiel

oldColumnFormats=1:date;%Y-%m-%d, 2:float,
  4:int, 6:str, 5:float;EN
newColumnFormats=A:int,B:float,C:date;Y%m%d%
bothColumnFormats=Currency:float,
  Instrument:int,
  3:str

oldColumnNames, newColumnNames, bothColumnNames

Type

Target

Wert

Liste von Namen

Default
Inhalt

Spaltennamen welche in der Diff-Ergebnisdatei für die alte/neue Datei angezeigt werden sollen. Falls diese nicht gesetzt werden, wird der Inhalt der ersten Zeile als Spaltennamen verwendet.

Beispiel

oldColumnNames=BLZ,ID,CCY,Reportdatei
newColumnNames=Currency,Instrument
bothColumnNames=BLZ,Currency,Instrument

oldColumnWidths, newColumnWidths, bothColumnWidths

Type

Target

Wert

Liste von Spaltenbreiten

Default
Inhalt

Spaltenbreite von der alten/neuen Datei im Falle von Dateien mit fixen Spaltenbreiten (oldFormat: FixedWidth)

Beispiel

oldColumnWidths=1,6,5,16,1,1,11
newColumnWidhts=10,2,5,5,10
bothColumnWidths=3,3,10,20,4,3

comparator

Type

Target

Wert

Name der verwendeten Zell Vergleichs-Implementierung.

Default
Inhalt

Bei der Verwendung von Factories können so unterschiedliche Implementierungen ausgewählt werden.

Beispiel

comparator=CustomDiffer

configurations

Type

Kommandozeile

Wert

Dateipfade

Default

ncdiff.cfg

Inhalt

Name der Konfigurationsdateien mit den Diff-Einstellungen als Beistrich separierte Liste. Zusätzlich können auch die Platzhalter „*“ für eine beliebige Zeichenkette und „?“ für ein bestimmtes Zeichen verwendet werden.

Beispiel

ncdiff –-configurations H:/diff/diff.cfg, H:/diff/diff2.cfg

Führt alle Targets in den beiden Konfigurationsdateien aus. Alternativ kann man es auch mit Platzhalter schreiben:

ncdiff –-configurations H:/diff/diff*.cfg

copyInputFiles

Type

Target

Wert

TRUE, FALSE

Default

FALSE

Inhalt

Parameter um zu spezifizieren ob die Input Dateien in das Ergebnisverzeichnis kopiert werden sollen.

Beispiel

copyInputFiles=TRUE

oldCSVDelimiter, newCSVDelimiter, bothCSVDelimiter

Type

Target

Wert

Trennzeichen

Default

;

Inhalt

Zeichen zur Abgrenzung von einzelnen Spalten in der alten/neuen Datei. Wird nur beim CSV berücksichtigt. Sonderzeichen können wie in Python üblich mit escaped werden. Beispielsweise wird als Tabulator Zeichen interpretiert. Andere Zeichen sind aber auch möglich, so ergibt x1f ein geschütztes Leerzeichen.

Beispiel

oldCSVDelimiter=;
newCSVDelimiter=/t
bothCSVDelimiter=,

oldCSVQuotechar, newCSVQuotechar, bothCSVQuotechar

Type

Target

Wert

Zeichen

Default

Inhalt

Das zur Quotierung in der alten/neuen Eingabedatei verwendete Zeichen.

Beispiel

oldCSVQuotechar='
newCSVQuotechar='
bothCSVQuotechar='

oldCSVQuoting, newCSVQuoting, bothCSVQuoting

Type

Target

Wert

QUOTE_NONE: Keine Quotierung von Zeichenketten. QUOTE_MINIMAL: Quotierung nur dann, wenn das Feldtrennzeichen in der Zeichenkette erwartet wird. Funktioniert ebenfalls, wenn das Feldtrennzeichen nicht in der Zeichenkette enthalten ist.

Default

QUOTE_MINIMAL

Inhalt

Die Quotierungseinstellung für die alten/neue Eingabedatei.

Beispiel

oldCSVQuoting=QUOTE_NONE
newCSVQuoting=QUOTE_MINIMAL
bothCSVQuoting=QUOTE_NONE

oldCSVDoublequote, newCSVDoublequote, bothCSVDoublequote

Type

Target

Wert

TRUE, FALSE

Default

TRUE

Inhalt

Wenn die doppelt Quotierung eingeschaltet ist, dann werden zwei aufeinanderfolgende Quotierungszeichen als ein Quotierungszeichen im Ergebnistext geliefert.

Beispiel

oldCSVDoublequote=FALSE
newCSVDoublequote=TRUE
bothCSVDoublequote=TRUE

oldCSVEscapechar, newCSVEscapechar, bothEscapechar

Type

Target

Wert

Zeichen

Default
Inhalt

Wenn <old|new|both>CSVQuoting auf QUOTE_NONE steht, dann wird erwartet, dass Feldtrennzeichen die ein Teil des Textes sind mit einem vorangestellten Escape-Zeichen gekennzeichnet werden.

Beispiel

oldCSVEscapechar=\
newCSVEscapechar=\
bothCSVEscapechar=\

oldCSVReplaceDelimiters, oldCSVReplaceDelimiters, bothCSVReplaceDelimiters

Type

Target

Wert

Komma getrennte Liste von delimiters die im File als Spaltentrennzeichen verwendet werden.

Default
Inhalt

Bei der Verwendung von verschiedenen Trennzeichen werden diese durch den im Parameter oldCSVDelimiter bzw. newCSVDelimiter ersetzt. Anstatt eines Zeichens kann auch der ASCII Code des Zeichens verwendet werden (dezimal).

Beispiel

oldCSVReplaceDelimiters= ,:,123
newCSVReplaceDelimiters= ,:,123
bothCSVReplaceDelimiters= ,:,123

differ

Type

Target

Wert

Name der verwendeten Zeilen Differenzbildungsimplementierung.

Default
Inhalt

Bei der Verwendung von Factories können so unterschiedliche Implementierungen ausgewählt werden.

Beispiel

differ=CustomDiffer

oldDirectory, newDirectory, bothDirectory

Type

Global

Wert

Ordnerpfad

Default

Keiner – muss spezifiziert werden

Inhalt

Absoluter oder relativer Pfad inklusive Ordnername des Ordners mit den alten/neuen zu vergleichenden Dateien.

Beispiel

oldDirectory=/drive_a/test/data/old/
newDirectory=drive_a/test/data/new/

oldEncoding, newEncoding, bothEncoding

Type

Target

Wert

Die Zeichensatz Kodierung der Eingabedatei auf der „Old“ Seite.

Default
Inhalt

Die Zeichensatz Kodierung legt fest wie die Zeichen in der Eingabedatei interpretiert werden. Möglich sind alle von Python unterstützte Zeichensatz Kodierungen: Python Standard Encodings

Beispiel

oldEncoding=cp1252
newEncoding=utf-8
bothEncoding=cp1252

extensionModules

Type

Target

Wert

Liste von Modulnamen

Default
Inhalt

Um Funktionalität zu verändern können Kunden Module konfigurieren, die Python Code enthalten um Teile der Diff-Funktionalität auszutauschen. Diese Python Module werden im NCDiff-X.Y/libs/extensions Ordner erwartet.

Beispiel

extensionModules=MyBankCustomisations

Erwartet dass das Python Modul MyBankCustomisations.py im Ordner NCDiff-X.Y/libs/extensions existiert und importiert werden kann.

oldFilePath, newFilePath, bothFilePath

Type

Target

Wert

Relativer Dateipfad

Default

Keiner – muss spezifiziert werden

Inhalt

Dateipfad der alten Input-Datei relativ zum oldDirectory.

Beispiel

oldFileName=SST1/ReportA.csv
newFileName=PnlReport.xml

oldFormat, newFormat, bothFormat

Type

Target

Wert

Dateitypbezeichnung

Default

Keiner – muss spezifiziert werden

Inhalt

Kürzel für das Datenformat der alten/neuen Eingabedatei. Standardmäßig werden XLS, XML, TAR; CSV, CSVVAR, FixedWidth (Textformat mit fixer Breite) und SQL unterstützt.

Beispiel

oldFormat=FixedWidth
newFormat=CSV
bothFormat=XML

oldHasHeader, newHasHeader, bothHasHeader

Type

Target

Wert

TRUE, FALSE

Default

TRUE

Inhalt

Die Spaltenbenennung wird durch die erste Zeile der jeweiligen Datei bestimmt – diese wird nicht verglichen. Wird hier FALSE spezifiziert, wird der Spaltenname selbst generiert (Column 1, Column 2, …). Die Datei wird dann aber ab der ersten Zeile verglichen.

Beispiel

oldHasHeader=TRUE
newHasHeader=False
bothHasHeader=FALSE

help

Type

Kommandozeile

Wert
Default
Inhalt

Gibt den Hilfetext über die verfügbaren Kommandozeilen Parameter aus.

Beispiel

ncdiff –help

HTMLResourcesDirectory

Type

Global

Wert

Ordnerpfad

Default

resources/html

Inhalt

Absoluter oder relativer Pfad inklusive Ordnername des Ordners in dem zusätzliche Ressourcen für die Report abgelegt sind. Für HTML Reports können dort:

  • Bilder im Unterverzeichnis img

  • Stylesheets im Unterverzeichnis css

  • JavaScript Dateien im Unterverzeichnis js

  • WebFonts im Unterverzeichnis font

abgelegt sein. Die Standard Implementierung des HTML Reports kopiert alle Dateien und Verzeichnisse aus dem Verzeichnis in das Ergebnisverzeichnis.

Beispiel

HTMLRessourceDirectory=C:/resources/html

oldIgnoreColumns, newIgnoreColumns, bothIgnoreColumns

Type

Target

Wert

Liste von Spaltennummern, eventuell mit Filterregel

Default
Inhalt

Spaltennummern aus der alten/neuen Datei, die nicht verglichen werden sollen. Schlüsselspalten werden nie verglichen. Es ist auch möglich eine Überprüfung zu anderen Spalten einzubauen. Der Ausdruck 7: contains(@14, 'xyz') bedeutet beispielsweise, dass die Spalte 7 ignoriert werden soll, wenn in der Spalte 14 der Text xyz steht. Als Überprüfungsregeln kommen alle Zellen basierten Filter in Frage.

Beispiel

oldIgnoreColumns=5, 15, 7: contains(@14; 'xyz')
newIgnoreColumns=A, F
bothIgnoreColumns=5, A, Instrument: contains(@'Curr'; 'EUR')

keepTempFiles

Type

Target

Wert

TRUE, FALSE

Default

FALSE

Inhalt

Parameter um die während des Vergleiches erzeugten temporären Dateien zu behalten oder zu löschen.

Beispiel

keepTempFiles=TRUE

oldKeyColumns, newKeyColumns, bothKeyColumns

Type

Target

Wert

Liste von Spaltennummern

Default

Keiner – muss spezifiziert werden

Inhalt

Für Spalte(n) aus der alten/neuen Datei, aus denen der eindeutige Schlüssel für eine Zeile gebildet werden soll. Dieser wird verwendet um Zeilen aus den beiden Inputdateien mit denselben Schlüsseln zu vergleichen.

Beispiel

oldKeyColumns=1,2,4
newKeyColumns=A,B,D
bothKeyColumns=Name,Instrument,Currency

Die Spalten 1,2 und 4 ergeben einen eindeutigen Schlüssel für eine Zeile in der „old“ Datei.

oldLabel, newLabel

Type

Global

Wert

Name für die alte/neue Seite.

Default
Inhalt

Dieser Label wird in den Ergebnisdateien zur Beschriftung der Tabellen und Sheets verwendet. Damit kann man die Ergebnisse besser lesbar gestalten, da man statt der generischen Bezeichnung „Old“ z.B. den Namen des Systems welche die ‚old’-Dateien generiert setzten kann. Zum Beispiel „Prod“ oder „SystemA“

Beispiel

oldLabel=Produktion
newLabel=Test

licenses

Type

Kommandozeile

Wert
Default
Inhalt

Gibt die Lizenzbedingungen von NCDiff und den Lizenzen der Bibliotheken von Drittherstellern aus.

Beispiel

ncdiff –licenses

mapColumnNames

Type

Target

Wert

Liste von alten und neuen Spaltennamen-Mappings

Default
Inhalt

Mittels der Spaltennamen wird definiert welche Spalte mit welcher verglichen werden soll. Schlüsselspalten dürfen nicht angegeben werden.

Beispiel

mapColumnNames=SpalteA:SpalteB, SpalteB:SpalteC

Hier wird angegeben, dass SpalteA von der Alt Datei mit SpalteB aus der Neu Datei verglichen werden soll und SpalteB aus der Alt Datei mit SpalteC aus der Neu Datei verglichen werden soll.

mapColumnIDs

Type: Target
Wert

Liste von alten und neuen Spaltennummern-Mappings

Default
Inhalt

Mittels der Spaltennummern wird definiert welche Spalte mit welcher verglichen werden soll. Schlüsselspalten dürfen nicht angegeben werden.

Beispiel

mapColumnIDs=1:2, 2:1, C:D

Hier wird angegeben, dass die erste Spalte aus der Alt Datei mit der zweiten Spalte aus der Neu Datei verglichen werden soll und dass die zweite Spalte der Alt Datei mit der ersten Spalte aus der Neu Datei verglichen werden soll.

maxResultLines

Type

Target

Wert

Number

Default

1000

Inhalt

Anzahl der maximal in einem Ergebnisreport aufscheinenden Zeilen. Dieser Parameter ist sinnvoll während der Testphase beim Erstellen einer Konfiguration sinnvoll, da man damit die Report länge kurz halten kann falls Fehlkonfigurationen zu vielen Einträgen führen. Aber auch im Betrieb ist es sinnvoll eine Obergrenze zu setzten, da riesige Dateien nur schwer zu warten sind und bei vielen Fehlern von einem Fehler in der Konfiguration oder der Erzeugung der Eingangsdaten auszugehen ist. Wir eine negativer Wert gesetzt so wird das als unendlich interpretiert und die Reports können entsprechend groß werden.

Beispiel

maxResultLines=1000

oldNumberFormat, newNumberFormat, bothNumberFormat

Type

Target

Wert

Länderkürzel für das Format

Default

DE

Inhalt

Nummernformat in der alten/neuen Input-Datei

  • EN … Englisches Nummernformat (z.B.: 5,000.0 oder 5000.0)

  • DE … Deutsches Nummernformat (z.B.: 5.000,0 oder 5000,0)

  • US … Spezielles US Nummernformat für negative Zahlen (z.B.: (100.1))

  • CH … Schweizer Nummernformat (z.B.: 5 000.0 oder 5‘000,0)

Beispiel

oldNumberFormat=EN
newNumberFormat=US
bothNumberFormat=DE

profile

Type

Kommandozeile

Wert
Default
Inhalt

Startet den NCDiff Lauf mit der Python Laufzeitanalyse. Die zusätzliche Ausgabe der Laufzeitanalyse am Ende des Laufs kann von Python Entwicklern zur Performance Optimierung des Python Quellcodes verwendet werden.

Beispiel

ncdiff -–profile --cfgFile H:/diff/mydiff-cfg

relativeColumnsTolerances

Type

Target

Wert

Map von Filterregeln und/oder Spaltennummer und Toleranz (in %) Paaren

Default
Inhalt

Definiert die relative Toleranz für eine bestimmte Spalte. Dieser Wert überschreibt den Wert des Parameters relativeTolerance für die definierte Spalte. Wird eine Filterregel angegeben, gilt der Toleranzwert nur, wenn die Regel zutrifft.

Beispiel

relativeColumnsTolerances=3: 0.1,
    4: 10.0,
    5: if(contains(@2; 'STOCK'); 2.0;
       if(contains(@2; 'SWAP'); 20.0))

Bedeutet, dass bei Spalte 3 die Werte um 0.1%, bei Spalte 4 um 10% abweichen dürfen. Die Werte in Spalte 5 dürfen um 2% abweichen, wenn Spalte 2 den Wert „STOCK“ enthält und um 20%, wenn Spalte 2 den Wert „SWAP“ enthält. Die Basis dabei ist der Wert der alten Spalte.

relativeTolerance

Type

Target

Wert

Float Wert in %

Default

0.0

Inhalt

Abweichung, die ein Wert in der Neuen Datei im Vergleich zur Alten prozentual abweichen darf.

Beispiel

relativeTolerance=10.0

Eine relative Abweichung der Werte vom mehr als 10% liefert einen Eintrag im Ergebnisreport.

resultDirectory

Type

Global

Wert

Ordnerpfad

Default

Keiner – muss spezifiziert werden

Inhalt

Absoluter oder relativer Pfad inklusive Ordnername des Ordners wo die Diff-Ergebnisdateien mit den vergleichenden Dateien abgelegt werden sollen.

Beispiel

resultDirectory=diff/result/

resultFilterDirectory

Type

Global

Wert

Ordnerpfad

Default
Inhalt

Absoluter oder relativer Pfad inklusive Ordnername des Ordners wo sich die ResultFilter/Whitlist Datei befindet.

Beispiel

resultFilterDirectory=filter

resultFilterEmptyMarker

Type

Target

Wert

Name

Default

„<empty>“

Inhalt

Wert der in der Result Filter xls Datei in der oldValue oder newValue Spalte stehen muss um einen leeren Zellenwert zu kennzeichnen.

Beispiel

resultFilterEmptyMarker=<leer>

resultFilterFilePath

Type

Target

Wert

Relativer Dateipfad

Default
Inhalt

Dateipfad der ResultFilter Datei relativ zum resultFilterDirectory.

Beispiel

resultFilterFilePath=ResultFilter.xls

resultFilterXLSSheetName

Type

Target

Wert

Name

Default

„ResultFilter“

Inhalt

Name des Sheets innerhalb einer Excel Datei von der die Informationen bezüglich des aktuellen ResultFilters gelesen werden sollen.

Beispiel

resultFilterXLSSheetName=ResultFilterTarget01

resultFormats

Type

Global

Wert

Liste von CSV, XLSX, HTML, JUNIT, XRAY

Default

CSV, HTML

Inhalt

Der Diff-Ergebnisdateityp. Mögliche Typen sind CSV, XLSX, HTML, JUNIT und XRAY aber das kann vom Kunden erweitert werden.

Die Formate JUNIT und XRAY liefern keine Detailergebnisse, sondern nur eine Übersicht zur weiteren Verarbeitung in einem Continuous Integration/Delivery System wie Jenkins oder Jira. Dienen also nur zur maschinellen Weiterverarbeitung und sind nicht als Report gedacht.

Beispiel

resultFormats=CSV,HTML

Generiert Ergebnisreports in den Formaten CSV und HTML.

resultNumberFormat

Type

Global

Wert

Länderkürzel für das Format

Default

DE

Inhalt

Nummernformat in der Ergebnis-Datei

  • EN … Englisches Nummernformat (z.B.: 5,000.0 oder 5000.0)

  • DE … Deutsches Nummernformat (z.B.: 5.000,0 oder 5000,0)

  • US … Spezielles US Nummernformat für negative Zahlen (z.B.: (100.1))

  • CH … Schweizer Nummernformat (z.B.: 5 000.0 oder 5‘000,0)

Beispiel

resultNumberFormat=EN

oldRowFilters, newRowFilters, bothRowFilters

Type

Target

Wert

Filterregeln

Default
Inhalt

Zeilen der alten/neuen Datei, welche den angegebenen Filterkriterien entsprechen, werden für den Vergleich ignoriert.

Beispiel

oldRowFilter=and(equals(@1; 'ABC'); startswith(@2; 'C'))

Hier werden alle Zeilen entfernt die in Spalte 1 der Zeichenkette ABC entsprechen uns in Spalte 2 die mit einem C beginnen. Auch Zahlen werden hier als Zeichenketten interpretiert und Groß-Kleinschreibung muss berücksichtigt werden.

newRowFilter=endswith(@'Instrument'; 'EUR')
bothRowFilter=contains(@A; 'EURIBOR')

showFilteredResults

Type

Target

Wert

TRUE, FALSE

Default

FALSE

Inhalt

Parameter um alle normalerweise durch ResultFilter ausgefilterte Differenzen trotzdem anzuzeigen.

Beispiel

showFilteredResults=TRUE

showFilteredTolerances

Type

Target

Wert

TRUE, FALSE

Default

FALSE

Inhalt

Parameter um alle normalerweise durch Toleranzen ausgefilterte Differenzen trotzdem anzuzeigen.

Beispiel

showFilteredTolerances=TRUE

showResult

Type

Global

Wert

TRUE, FALSE

Default

FALSE

Inhalt

Anzeigen des Ergebnisses im Browser oder Excel je nach eingestelltem Ergebnisformat. Sind mehrere Ergebnisformate definiert wird das erste gefundenen Ergebnisformat angezeigt, wobei in folgender Reihenfolge gesucht wird:

  1. HMTL

  2. Microsoft Excel

  3. CSV

Beispiel

showResult = TRUE

oldSQLConnection, newSQLConnection, bothSQLConnection

Type

Target

Wert

Datenbank Verbindungsstring

Default
Inhalt

Ein Datenbank Treiber spezifischer Verbindungsstring. Einen guten Überblick gibt die Homepage von pyodbc Connection Strings. Für ODBC Datenbanken gibt es eine Vielzahl an Verbindungsstrings auf ConnectionStrings.com.

  1. Das erste Beispiel zeigt einen möglichen ODBC Verbindungsstring für den Microsoft SQL Server.

  2. Das zweite Beispiel eine Verbindung zu einem Microsoft SQL Server 2012, der zur Authentifizierung den aktuell angemeldeten Benutzer verwendet. Durch die Angabe von Trusted_Connection=yes ist kein Passwort erforderlich. Mit Encrypt=yes werden die Daten verschlüsselt über das Netzwerk übertragen. Es lässt sich derselbe Verbindungsstring mit bothSQLConnection verwenden, falls die Datenbank das Schema für die alten und neuen Tabellen enthält.

  3. Das dritte Beispiel verwendet eine ODBC Datenquelle. Diese kann mit „ODBC Datenquellen verwalten“ angelegt werden. In einer ODBC Datenquelle lassen sich auch Passwörter hinterlegen, welche aber meist unverschlüsselt gespeichert werden. Daher sollte wenn immer möglich Windows Authentifizierung verwendet werden.

Beispiel

oldSQLConnection = DRIVER={SQL Server};SERVER=HOSTNAME;DATABASE=DBOLD;UID=BENUTZERNAME;PWD=PASSWORT
newSQLConnection = DRIVER={SQL Server};SERVER=HOSTNAME;DATABASE=DBNEW;UID=BENUTZERNAME;PWD=PASSWORT
bothSQLConnection = DRIVER={SQL Server Native Client 11.0};SERVER=HOSTNAME;DATABASE=DB;Trusted_Connection=yes;Encrypt=yes
oldSQLConnection = DSN=DBOLD
newSQLConnection = DSN=DBNEW

oldSQLDriver, newSQLDriver, bothSQLDriver

Type

Target

Wert

pyodbc, sqlite3, …

Default

pyodbc

Inhalt

Dieser Parameter gibt den Namen des Python DBAPI2 Treibermoduls an. Diese Einstellung wird höchst selten geändert werden müssen, da mit pyodbc der Zugriff auf alle Datenbanken die einen ODBC Treiber bereitstellen möglich ist. Da pyodbc nicht Teil der Standard Python Installation ist, muss dieser Treiber installiert werden (Python ODBC Library).

Beispiel

oldSQLDriver = sqlite3

oldSQLFetchSize, newSQLFetchSize, bothSQLFetchSize

Type

Target

Wert

Abfragegröße bei SQL Abfragen

Default

500

Inhalt

Hier wird festgelegt wie viele Zeilen bei einer Abfrage auf einmal geholt werden. Mit dem Standardwert werden beispielsweise immer Blöcke von 500 Zeilen abgefragt und diese dann weiterverarbeitet. Diese Einstellung dient zur Performance Optimierung.

Beispiel

bothSQLFetchSize = 2000

oldSQLQuery, newSQLQuery, bothSQLQuery

Type

Target

Wert

Abfrage an eine SQL Datenbank.

Default
Inhalt

Name einer Tabelle oder View in einer SQL Datenbank, oder eine select Abfrage. Wenn die angegeben Abfrage nicht mit „select“ beginnt, dann wird angenommen dass alle Spalten einer Tabelle abgefragt werden sollen und automatisch eine select Abfrage in der Form select * from „TABELLENNAME“ durchgeführt.

Beispiel

oldSQLQuery = TABELLENNAME
newSQLQuery = select * from TABELLENNAME

statisticTimeStampFormat

Type

Target

Wert

Python Timestamp-Format

Default

Inhalt

Hier kann man ein Zeitstempelformat definieren das verwendet wird um an das statistics.html/csv/xlsx einen Zeitstempel anzuhängen.

Beispiel

statisticTimeStampFormat=%Y-%m-%d

stopOnMaxResultLines

Type

Target

Wert

TRUE, FALSE

Default

FALSE

Inhalt

Parameter um zu spezifizieren ob bei Erreichen der maximal zu schreibenden Fehlerzeilen der Diff-Prozess noch weitergeführt werden soll. Falls abgebrochen werden soll, wird nur der aktuell laufende Prozess gestoppt, aber nicht die gesamte Ausführung des NCDiff Tools.

Beispiel

stopOnMaxResultLines=TRUE

targets

Type

Kommandozeile

Wert

Namen der Targets mit Beistrich getrennt

Default

Alle Targets der Konfigurationsdatei

Inhalt

Lediglich angegebene Targets werden mit den Einstellungen aus der Konfigurationsdatei gestartet. Falls kein Wert spezifiziert wird, werden alle Targets in der Konfigurationsdatei ausgeführt.

Beispiel

ncdiff –-cfgFile H:/diff/mydiff-cfg –-target Report1

Führt das Target Report1 die in der spezifizierten Konfigurationsdatei definiert ist aus.

tempDirectories

Type

Target

Wert

Liste von Ordnername

Default

System Temp-Verzeichnis

Inhalt

Ordner in dem temporär Dateien, wie zum Beispiel die Datei mit den nach Schlüsseln sortierten Einträgen, erzeugt werden sollen. Die Ordner werden im Round-Robin verfahren benutz, wird keines angegeben so wird das System Temp-Verzeichnis verwendet.

Beispiel

tempDirectories=/var/tmp, /usr/temp

templateDirectory

Type

Global

Wert

Ordnerpfad

Default

templates

Inhalt

Absoluter oder relativer Pfad zum Ablageort sämtlicher Templates. Aktuell verwendet nur der HTML und XLSX Report Templates.

Beispiel

templateDirectory=templates

oldXLSSheetName, newXLSSheetName, bothXLSSheetName

Type

Target

Wert

Name

Default
Inhalt

Sheet Name für die alte/neue Datei bei einem XLS Dateivergleich. Falls bei einem XLS Vergleich kein Sheet Name spezifiziert wird, dann wird immer nur das erste Sheet der Datei zum Vergleich herangezogen.

Beispiel

oldXlsSheetName=Sheet1
newXLSSheetNAme=Result
bothXLSSheetName=PNLReport

XLSXTemplate

Type

Global

Wert

Dateiname

Default

template_green-grey.xltx

Inhalt

Name des Templates, welches für Excel 2007 basierte Dateien verwendet werden soll. Das Template definiert Spaltennamen und Formatierungen für die Ergebnisreports.

Beispiel

XLSXTemplate=customer_template.xltx

Konfigurationswertermittlung

Nachfolgend ist die Konfigurationsparametervererbungsreihenfolge angeführt (höchste Priorität oben):

Ebene

Kurzbeschreibung

Kommandozeile

Parameter spezifiziert auf Kommandozeileneben sind die höchstwertigen Konfigurationsparameter

[GOBAL]

GLOBAL Konfigurationsparameter überschreiben immer alle TARGET``oder ``DEFAULT Parameter

new/old

Seitenspezifische new``|``old Parameterkonfiguration ist immer höherwertig als eine both Konfiguration. Diese gilt auch innerhalb von GLOBAL, TARGET und DEFAULT selber.

both

Beidseitige Konfiguration überschreibt DEFAULT Werte

[DEFAULT]

Konfigurationsmöglichkeit mit der niedrigsten Priorität

Für die Konfigurationsparameter Format, Directory, FilePath und Label existiert mit Absicht kein both Verwendungsmöglichkeit.

[GLOBAL]
newNumberFormat=EN
oldNumberFormat=DE

[DEFAULT]
bothEncoding=cp1252
bothNumberFormat=US

[TARGET]
bothEncoding=UTF-8
newNumberFormat=US
oldNumberFormat=CH

Im angeführten Beispiel würde folgende Werte ermittelt werden:

  • newEncoding=UTF-8 aus TARGET Sektion (bothEncoding)

  • oldEncoding=UTF-8 aus TARGET Sektion (bothEncoding)

  • newNumberFormat=EN aus GLOBAL Sektion

  • oldNumberFormat=DE aus GLOBAL Sektion

[GLOBAL]
bothNumberFormat=DE

[DEFAULT]
bothEncoding=cp1252
newNumberFormat=CH
oldNumberFormat=US

[TARGET]
newEncoding=UTF-16
oldNumberFormat=EN

Im angeführten Beispiel würde folgende Werte ermittelt werden:

  • newEncoding=UTF-16 aus TARGET Sektion

  • oldEncoding=cp1252 aus DEFAULT Sektion (bothEncoding)

  • newNumberFormat=DE aus GLOBAL Sektion (bothNumberFormat)

  • oldNumberFormat=DE aus GLOBAL Sektion (bothNumberFormat)

ncdiff --configurations <file.cfg> --newNumberFormat=DE
[GLOBAL]
bothNumberFormat=US
newEncoding=cp1252

[DEFAULT]
bothEncoding=UTF-8
newNumberFormat=EN
oldNumberFormat=CH

[TARGET]
newEncoding=UTF-16
oldNumberFormat=EN

Im angeführten Beispiel würde folgende Werte ermittelt werden:

  • newEncoding=cp1252 aus GLOBAL Sektion

  • oldEncoding=UTF-8 aus DEFAULT Sektion (bothEncoding)

  • newNumberFormat=DE aus Kommandozeile

  • oldNumberFormat=US aus GLOBAL Sektion (bothNumberFormat)

ncdiff --configurations <file.cfg> --newNumberFormat=CH
[GLOBAL]
bothNumberFormat=EN
newNumberFormat=US
oldNumberFormat=DE
newEncoding=UTF-8

[DEFAULT]
bothEncoding=cp1252
newNumberFormat=DE
oldNumberFormat=US

[TARGET1]
newEncoding=UTF-16
oldNumberFormat=EN

Im angeführten Beispiel würde folgende Werte ermittelt werden:

  • newEncoding=UTF-8 aus GLOBAL Sektion

  • oldEncoding=cp1252 aus DEFAULT Sektion (bothEncoding)

  • newNumberFormat=CH aus Kommandozeile

  • oldNumberFormat=DE aus GLOBAL Sektion (oldNumberFormat)

Spaltenkonvertierungen

Über die Konfigurationsparameter oldColumnFormats, newColumnFormats oder bothColumnFormats kann das Format der Zellwerte für spezifische Spalten festgelegt werden, um diese in eine der folgenden Datentypen für den Vergleich zu konvertieren:

Spaltenformat

Kurzbeschreibung

Datentyp

bool

Wahrheitswerte: TRUE/FALSE.

Boolean

date

Datumswerte ohne Uhrzeit.

Date

datetime

Datumswerte mit Uhrzeit.

Date & Time

int

Vorzeichenbehaftete Ganzzahlen.

Integer

modint

Vorzeichenbehaftete Ganzzahlen in speziellem Format „00000123-“ welches in FixedWidth Dateien üblich ist.

Integer

float

Fließkommazahlen.

Float

str

Text

String

time

Uhrzeit ohne Datum.

Time

bool

Datentyp

Boolean

Format
Beschreibung

Wahrheitswerte. Folgende Textwerte können als TRUE oder FALSE erkannt werden:

Text mit Wahrheitswert TRUE

Text mit Wahrheitswert FALSE

1

0

True

False

true

false

TRUE

FALSE

Wahr

Falsch

wahr

falsch

WAHR

Falsch

Yes

No

yes

no

YES

NO

Ja

Nein

ja

nein

JA

NEIN

Beispiel

1: bool, B: bool

date

Datentyp

Date

Format

Python date Format

  • %Y: Jahr mit Jahrhundert, z.B.: 2013

  • %y: Jahr ohne Jahrhundert, z.B.: 13

  • %m: Monat als Zahl, z.B.: 02

  • %d: Tag des Monats als Zahl, z.B.: 28

Beschreibung

Parst Datumswerte ohne Uhrzeit: Die Formatangabe %Y-%m-%d kann Datumswerte im Format 2013-02-28 parsen.

Beispiel

1: date;%Y-%m-%d

time

Datentyp

Time

Format

Python time Format

  • %H: Stunde für 24h Uhrzeit, z.B.: 17

  • %I: Stunde für 12h Uhrzeit, z.B.: 08

  • %p: AM/PM

  • %M: Minute der Stunde, z.B.: 13

  • %S: Sekunde der Minute, z.B.: 48

Beschreibung

Parst Uhrzeitwerte ohne Datum: Die Formatangabe %H:%M:%S kann eine Uhrzeit im Format 17:08:48 parsen.

Beispiel

C: time;%H:%M:%S

datetime

Datentyp

Date and Time

Format

Python datetime Format

  • %Y: Jahr mit Jahrhundert, z.B.: 2013

  • %y: Jahr ohne Jahrhundert, z.B.: 13

  • %m: Monat als Zahl, z.B.: 02

  • %d: Tag des Monats als Zahl, z.B.: 28

  • %H: Stunde für 24h Uhrzeit, z.B.: 17

  • %I: Stunde für 12h Uhrzeit, z.B.: 08

  • %p: AM/PM

  • %M: Minute der Stunde, z.B.: 13

  • %S: Sekunde der Minute, z.B.: 48

Beschreibung

Parst Datumswerte mit Uhrzeit: Die Formatangabe %Y-%m-%d %H:%M:%S kann Datumswerte im Format 2013-02-28 17:08:48 parsen.

Beispiel

1: datetime;%Y-%m-%d %H:%M:%S

str

Datentyp

String

Format

i: ignorieren von Groß- Kleinschreibung

Beschreibung

Verwendet den Text wie er in der Zelle steht.

Beispiel

1: str, 10: str;i

int

Datentyp

Integer

Format

Keines oder „US“.

Beschreibung

Wandelt den Text der Zelle in eine Ganzzahl um. Bei US Format werden Zahlen die in runden Klammern stehen als negative Zahl interpretiert: (5000) => -5000.

Wird kein Format angegeben so wird das eingestellte oldNumberFormat, newNumberFormat, bothNumberFormat verwendet.

Beispiel

1: int, 3: int;US

modint

Datentyp

Integer

Format
Beschreibung

Wandelt den Text der Zelle in eine Ganzzahl um. Bei modint wird erwartet dass die Zahlen im Format 000000123456- oder 000000123456+ vorliegen. Das Vorzeichen am Ende wird zwingend vorrausgesetzt.

Beispiel

1: modint

float

Datentyp

Float

Format

Keines oder „DE“, „EN“, „US“.

Beschreibung

Wandelt den Text der Zelle in eine Gleitkommazahl um:

  • DE: -5.000,7 oder -5000,7 => -5000,7

  • EN: -5,000.7 oder -5000.7 => -5000,7

  • US: (5,000.7) oder (5000.7) => -5000,7

Wird kein Format angegeben so wird das eingestellte oldNumberFormat, newNumberFormat, bothNumberFormat verwendet.

Beispiel

1: float, 3: float;EN

Platzhalter in Dateinamen

NCDiff bietet die Möglichkeit in Dateinamen Platzhalter anzugeben, welche während des Diff Laufs ersetzt werden. Platzhalter werden in den resultDirectory, HTMLResourcesDirectory, oldDirectory, newDirectory, resultFilterDirectory, resultFilterFilePath Konfigurationseinträgen unterstützt.

Folgende Platzhalter sind möglich:

${VARIABLE}

Wird durch den Namen der Umgebungsvariable ersetzt

~/ oder ~Benutzer/

Wird durch den Benutzernamen ersetzt

{DATUMSFORMAT}

DATUMSFORMAT ist ein Python datetime Format

  • %Y: Jahr mit Jahrhundert, z.B.: 2013

  • %y: Jahr ohne Jahrhundert, z.B.: 13

  • %m: Monat als Zahl, z.B.: 02

  • %d: Tag des Monats als Zahl, z.B.: 28

  • %H: Stunde für 24h Uhrzeit, z.B.: 17

  • %I: Stunde für 12h Uhrzeit, z.B.: 08

  • %p: AM/PM

  • %M: Minute der Stunde, z.B.: 13

  • %S: Sekunde der Minute, z.B.: 48

{DATUMSFORMAT![+-]ZAHL[smhdbwy]}

DATUMSFORMAT siehe {DATUMSFORMAT} [+-]ZAHL[smhdbwy] erlaubt Zeitanpassungen relativ zu Datum und Uhrzeit des aktuellen Laufs um den Wert +ZAHL oder -ZAHL. Die Art der Anpassung wird über einen der Buchstaben smhdbwy festgelegt:

  • s: Anpassung von Sekunden

  • m: Anpassung von Minuten

  • h: Anpassung von Stunden

  • d: Anpassung von Tagen

  • b: Anpassung von Geschäftstagen. Ein Geschäftstag ist von Mo-Fr.

  • w: Anpassung von Wochen

  • y: Anpassung von Jahren

Zusätzlich zur Verwendung von Platzhaltern ist die Verwendung von Wildcards für die alte und neue Eingabedatei vorgesehen. Die jeweilige Datei wird gefunden wenn ein * oder ? Muster auf eine existierende Datei zutrifft. Existieren mehre Report Dateien so wird die Datei mit dem letzten Änderungstermin verwendet.

Beispiel Platzhalter und Wildcards

Die Verzeichnisstruktur sieht wie folgt aus:

  • reports
    • prod Produktiv Reports
      • 2013-02-22 Lauf zum letzten Geschäftstag (Freitag)
        • risk Zwei Reports vom selben Abend
          • delta_gamma_theta-2013-02-22_173000.csv

          • delta_gamma_theta-2013-02-22_205517.csv

    • test Test Reports
      • 2013-02-22 Lauf zum letzten Geschäftstag (Freitag)
        • risk Report wurde am Montag um 3h erstellt
          • delta_gamma_theta-2013-02-25_030048.csv

Eine mögliche Konfiguration für die alt Referenzdateien ist:

oldDirectory=/reports/prod/{%Y-%m-%d!-1b}/
oldFilePath=risk/delta_gamma_theta-{%Y-%m-%d!-1b}_??????.csv

oder alternativ:

oldFilePath=risk/delta_gamma_theta-*.csv

Die Konfiguration für neu Testdateien kann so aus sehen:

newDirectory=/reports/test/{%Y-%m-%d!-1b}/
newFilePath=risk/delta_gamma_theta-{%Y-%m-%d}_??????.csv
oder alternativ:
newFilePath=risk/delta_gamma_theta-*.csv

Wie funktioniert das Auffinden der Dateien?

Am Beispiel alt Referenzdaten, Diff Lauf am Montag, den 25.02.2013.

Zuerst werden die Platzhalter ersetzt:

oldDirectory=/reports/prod/2013-02-22/
oldFilePath=risk/delta_gamma_theta-2013-02-22_??????.csv

Als nächstes wird mittels Wildcards nach Dateien gesucht. Dabei werden die beiden Dateien

delta_gamma_theta-2013-02-22_173000.csv
delta_gamma_theta-2013-02-22_205517.csv

gefunden.

Von diesen beiden Dateien wird die letzte Änderungszeit am Dateisystem ermittelt und die neueste ausgewählt. Für den Diff Lauf wird also

delta_gamma_theta-2013-02-22_205517.csv

als alt Referenzdatei gewählt.