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. .. code-block:: cfg [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 :doc:`filter` dokumentiert. .. contents:: Parameterliste :depth: 3 :local: 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: sh 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: .. code-block:: sh 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: .. code-block:: cfg 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: .. code-block:: cfg oldCSVDelimiter=; newCSVDelimiter=/t bothCSVDelimiter=, oldCSVQuotechar, newCSVQuotechar, bothCSVQuotechar ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :Type: Target :Wert: Zeichen :Default: " :Inhalt: Das zur Quotierung in der alten/neuen Eingabedatei verwendete Zeichen. :Beispiel: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg oldCSVDoublequote=FALSE newCSVDoublequote=TRUE bothCSVDoublequote=TRUE oldCSVEscapechar, newCSVEscapechar, bothEscapechar ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :Type: Target :Wert: Zeichen :Default: - :Inhalt: Wenn CSVQuoting auf QUOTE_NONE steht, dann wird erwartet, dass Feldtrennzeichen die ein Teil des Textes sind mit einem vorangestellten Escape-Zeichen gekennzeichnet werden. :Beispiel: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg oldHasHeader=TRUE newHasHeader=False bothHasHeader=FALSE help ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :Type: Kommandozeile :Wert: - :Default: - :Inhalt: Gibt den Hilfetext über die verfügbaren Kommandozeilen Parameter aus. :Beispiel: .. code-block:: sh 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg oldLabel=Produktion newLabel=Test licenses ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :Type: Kommandozeile :Wert: - :Default: - :Inhalt: Gibt die Lizenzbedingungen von NCDiff und den Lizenzen der Bibliotheken von Drittherstellern aus. :Beispiel: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: sh 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg resultFilterDirectory=filter resultFilterEmptyMarker ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :Type: Target :Wert: Name :Default: „“ :Inhalt: Wert der in der Result Filter xls Datei in der oldValue oder newValue Spalte stehen muss um einen leeren Zellenwert zu kennzeichnen. :Beispiel: .. code-block:: cfg resultFilterEmptyMarker= resultFilterFilePath ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :Type: Target :Wert: Relativer Dateipfad :Default: - :Inhalt: Dateipfad der ResultFilter Datei relativ zum resultFilterDirectory. :Beispiel: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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. .. code-block:: cfg 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: .. code-block:: cfg showFilteredResults=TRUE showFilteredTolerances ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :Type: Target :Wert: TRUE, FALSE :Default: FALSE :Inhalt: Parameter um alle normalerweise durch Toleranzen ausgefilterte Differenzen trotzdem anzuzeigen. :Beispiel: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg oldSQLConnection = DRIVER={SQL Server};SERVER=HOSTNAME;DATABASE=DBOLD;UID=BENUTZERNAME;PWD=PASSWORT newSQLConnection = DRIVER={SQL Server};SERVER=HOSTNAME;DATABASE=DBNEW;UID=BENUTZERNAME;PWD=PASSWORT .. code-block:: cfg bothSQLConnection = DRIVER={SQL Server Native Client 11.0};SERVER=HOSTNAME;DATABASE=DB;Trusted_Connection=yes;Encrypt=yes .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: sh 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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: .. code-block:: cfg 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. .. code-block:: cfg [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 .. code-block:: cfg [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``) .. code-block:: sh ncdiff --configurations --newNumberFormat=DE .. code-block:: cfg [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``) .. code-block:: sh ncdiff --configurations --newNumberFormat=CH .. code-block:: cfg [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 | Integer | | | Dateien üblich ist. | | +---------------+---------------------------------------------------------------------------------------+--------------+ | 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: .. code-block:: 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: .. code-block:: 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: .. code-block:: 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: .. code-block:: 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: .. code-block:: 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: .. code-block:: 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: .. code-block:: 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: .. code-block:: 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: .. code-block:: cfg oldDirectory=/reports/prod/{%Y-%m-%d!-1b}/ oldFilePath=risk/delta_gamma_theta-{%Y-%m-%d!-1b}_??????.csv oder alternativ: .. code-block:: cfg oldFilePath=risk/delta_gamma_theta-*.csv Die Konfiguration für neu Testdateien kann so aus sehen: .. code-block:: cfg 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: .. code-block:: cfg 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 .. code-block:: cfg 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 .. code-block:: cfg delta_gamma_theta-2013-02-22_205517.csv als alt Referenzdatei gewählt.