Linedif 1.07            Datum: 04.06. 2005



WAS IST  linedif?
=================
linedif vergleicht zwei Textdateien eine Referenzdatei (Datei1) mit
einer Vergleichsdatei (Datei2) und schreibt das Resultat in eine dritte Datei(Zieldatei).
Der Vergleich wird Zeile fr Zeile
durchgefrt und kann benutzt werden um eine grosse Anzahl unterschiedlicher
Textdateien, wie Emails und Logdateien, vergleichen.
Man kann viele unterschiedliche Vergleiche mit mehreren Zieldateien in einem Rutsch machen.
Jeder Vergleich wird in eine Zieldatei geschrieben mit den neuen, den gelschten,
den unvernderten Zeilen oder jegliche Kombination davon.

Es spielt dabei keine Rolle, wo die Unterschiede sind, die Dateien werden vor dem Vergleich sortiert.

Um mehrere Auswertungen automatisch durchzufhren kann linedif von einer CMD-Datei gestartet werden.

Lange und komplizierte Optionen knnen ber eine Konfigurationsdatei (z.B. linedif.cfg) bergeben werden.
Dies einerseits ist einfacher beim einem Tippfehler und andererseits
kann der Komandointerpreter (die Comandozeile) nur eine bestimmte Zeilenlnge handhaben.

Linedif verarbeitet keine Binaerdateien. Es wird dann die Fehlermeldung
"Datei xx ist leer" ausgegeben, linedif macht schlicht und einfach nichts oder
das Resultat ist einfach unsinnig.



Grenzen von linedif
===================
Bei Dateien mit immer wiederkehrenden identischen Zeileninnhalten koennen
Ueberlappungen auftreten. Je krzer die Zeile,
desto groesser die Chance. linedif zeigt die Inhalte korrekt an, aber die
Zeilennummer kann falsch sein. Daher ist Linedif nur bedingt tauglich um z. B.
C-Quellcode zu vergleichen. In solch einem Fall rate ich zu einem Tool wie
PMDIFF, Guiffy, GNUdiff, ddif....



INSTALLATION
============
linedif.exe nach belieben in ein Verzeichnis das im Pfad vorkommt kopieren.
Zusaetzlich dieses linedif.txt, die Datei Message und eventuell linedif.cfg als Vorlage.


DEINSTALLATION
==============
Alle Dateien loeschen.


GARANTIE
===========
Der Autor uebernimmmt weder Garantie noch Haftung fuer die Software oder Fehler,
die durch diese Software entstehen. Der Benutzer ist fuer eventuellen Schaden
selbst verantwortlich.


LIZENZ
======
linedif ist Freeware.



SYNTAX
=======

Von der Kommandozeile:
----------------------
Linedif  Datei1  Datei2  Zieldateien   /Schalter ... Zieldateien... /Schalter
Der erste Schalter wird dem ersten Zielfile zugeordnet, usw.
Schalter und Zieldateien knnen deshalb in beliebiger Reihenfolge sein.
Ausnahme sind die generellen Optionen.

Datei 1 = Referenzdatei
Datei 2 = Vergleichsdatei


Mit einem Configurationsfile:
-----------------------------
linedif @ Dateiname



Zieldateien
===========
Die erste Datei wird dem ersten Schalter zugerechnet, die zweite Datei wird dem
zweiten Schalter zugerechnet.......

Zieldateien duerfen keine existierenden Dateien sein, sofern nicht die Option
o verwendet wird.


Schalteraufbau
==============

Ein Schalter beginnt immer mit / und einer oder mehreren Optionen.
Die Reihenfolge der Optionen spielt keine Rolle.


Individuelle Optionen
---------------------
Diese Optionen koennen fr jede Auswertung und fr jedes Zielfile individuell gesetz
und mit einem einzigen Aufruf ausgefhrt werden.


a oder A        alfabetisch sortiert, Gross und kleinschreibung werden unterschieden.
                [ a ] kann nicht mit [ n ] zusammen verwendet weden.
                Linedif kennt weder Sonderzeichen noch Umlaute.


n  oder N       nummerisch sortiert. Die Zeilen werden anhand der Zeilennummer in der
                Originaldatei ausgegeben.
                Nicht mit der Option [ a ] verwenden.


l  oder L       Die Zeilennummer wird ausgegeben.
                Die Zeilennummer wird von der Originaldatei bernommen.


z  oder Z       nur Zunahme, Zeilen, die nur in Datei 2 vorhanden sind.
                kann nicht mit w, b, g, t, 1 oder 2 verwendet werden.


w  oder W       nur Abnahme, Zeilen die nur in Datei 1 vorhanden sind.
                kann nicht mit z, b, g, t, 1 oder 2 verwendet werden.


b  oder B       beides - Zunahme und Abnahme
                kann nicht mit w, z, g, t, 1 oder 2 verwendet werden.


g  oder G       gleiche  Zeilen, die in Datei 1 und in Datei 2 vorhanden sind
                kann nicht mit w, b, z, t, 1 oder 2 verwendet werden.


t  oder T       Zunahme, Abnahme und gleiche Zeilen entspricht Datei 1 mit der Zunahme aus Datei 2.
                Zunahme kann nicht mit w, b, g, z, 1 oder 2 verwendet werden.


s  oder S       Leerzeilen, Leerzeichen und nicht druckbare Zeichen vor dem ersten
                Buchstaben werden gelscht.


1               Datei 1  mit a, al, nl, r, oder s
                kann nicht mit w, b, g, t, z oder 2 verwendet werden.


2               Datei 2  mit a, al, nl, r, oder s
                kann nicht mit w, b, g, t, 1 oder z verwendet werden.


+, h oder H     Die neuen Zeilen werden mit ++ markiert.
                Die geloeschten Zeilen werden mit -- markiert.
                Gleiche Zeilen enthalten entsprechend zwei Leerschlge.
                Nur mit b oder t


r  oder R       Die Reihenfolge, in der die Zeilen ausgegeben werden ist umgekehrt.
                Bei alfabetischer Sortierung also von "z" nach "a".
                Bei nummerischer Ausgabe wird zu erst die hchste Zeile ausgegeben.


o oder O        Fals die Zieldatei existiert wird sie berschrieben.
                Der Schalter o kann in Kombination mit jedem anderen Schalter angewendet werden.
                Der Schalter o soll man nicht anwenden, wenn man die Quelldateien berschreiben will.
                In dem Fall macht man eine Kopie der Quelldatei.



Generelle Optionen
------------------

Diese Optionen werden nur einmal aufgerufen und ausgefhrt.
Generelle Optionen werden VOR dem Vergleich ausgefhrt.
Sie sind fr alle individuellen Auswertungen und Zieldateien die gleichen.
Generelle Optionen werden auf beide Quelldateien angewendet.

Will man bei bestimmten Auswertungen berschssige Leerzeilen lschen und bei anderen nicht,
muss man linedif zwei mal aufrufen !


/DT             Delete Tab's.
                Tabs werden in Leerzeichen umgewandelt.
                Dabei wird ein TAB in ein Leerzeichen umgewandelt.


/DS             Delete Space.
                Ersetzt zwei oder mehr Leerzeichen durch ein Leerzeichen.
                Leerzeichen am Anfang einer Zeile werden gelscht.


/DL             Delete Lines.
                Ersetzt zwei oder mehr Leerzeilen durch eine einzig Leerzeile


/HE             Header Endet.
                Der Datei-Header endet mit einer leeren Zeile. Es werden nur
                Zeilen verglichen, die nach dem Header aufgefhrt sind.
                Der Header wird nicht in die Zieldateien geschrieben.
                Enthlt nur eine Daten einen Header wird die Auswertung falsch sein.


/HE:text        Header Endet mit einem Text
/HE: text       Der Header endet mit einem Zeichen oder einer Zeichenfolge.
                Ausgewertet wird von der nchste Zeile.
                Die Zeichenfolge kann direkt ohne Space nach dem Doppelpunkt sein.
                Die Zeichenfolge darf keinen Leerschlag beinhalten.
                Zeichen nach der entsprechenden Zeichenfolge bis zum Ende der Zeile werden ignoriert.
                Enthlt nur eine Daten einen Header wird die Auswertung falsch sein.


/HEL:text       Header Endet mit einer Zeile
/HEL: text      Der Header endet mit einer Zeile, die ein bestimmtes Zeichen oder eine
                bestimmte Zeichenfolge hat.
                Die Zeichenfolge kann direkt ohne Space nach dem Doppelpunkt sein.
                Die Zeichenfolge darf keinen Leerschlag beinhalten.
                HEL Funktioniert nicht, wenn vor der Zeichenfolge ein Leerschlag ist
                Enthlt nur eine Daten einen Header wird die Auswertung falsch sein.


/HR1            Header Restore Datei 1
                Der Header von File 1 wird in jedes Zielfile eingefgt.
                Da in der Zieldatei auch Daten von der Datei 2 sein knnen,
                kann  der eingefgte Header inkorrekt sein.


/HR2            Header Restore Datei 2
                Der Header von File 2 wird in jedes Zielfile eingefgt.
                Da in der Zieldatei auch Daten von der Datei 1 sein knnen,
                kann  der eingefgte Header inkorrekt sein.


/HRF1 x:\Datei  Der Header von Datei1 wird nach x:\Datei kopiert.
                Wichtig: Nach HRF1 muss ein Leerschlag und direkt danach die Zieldatei folgen.


/HRF2 x:\Datei  Der Header von Datei2 wird nach x:\Datei kopiert.
                Wichtig: Nach HRF2 muss ein Leerschlag und direkt danach die Zieldatei folgen.


/I x:\Datei     Der Inhalt der Datei wird nach jedem Eintrag eingefgt.
                Wichtig: Linedif macht von selbt den ersten Zeilenumbruch.
                Will man nur eine leere Zeile einfgen, dann kreiert man eine leere Datei.
                Achtung, Linedif kennt keine Begrenzug der der Zeilenlnge oder Dateigrsse!!
                Wird ein falsches Insertfile angegeben, kann dies zu einer sehr grossen Datei fhren.
                Beim Versuch diese Datei zu ffnen knnen sich sehr viele Programme derart verschlucken, dass nur noch ein CAD hilft !!


/KL:text        Komentarzeile
                Eine Zeile, die mit diesem Komentar beginnt wird gelscht.
/KL: text       Der Komentar wird nicht im Zielfile eingefgt.
                Der Komentar beginnt mit eine bestimmten Zeichen oder einer Zeichenfolge.
                Die Zeichenfolge kann direkt ohne Space nach dem Doppelpunkt sein.


/KB:text        Ein Komentar beginnt mit diesem Zeichen oder Zeichenfolge.
/KB: text       Der Komentar endet mit diesem Zeichen oder Zeichenfolge.
/KE:text        KB und KE mssen immer zusammen angegeben weden.
/KE: text       Alles zwischen den Kommentarzeichen wird gelscht.
                Ein solcher Komentar kann sich ueber mehrere Zeilen erstrecken.
                Linedif fgt keinen Zeilenumbruch ein wenn der Komentar mitten
                in einer Zeile beginnt oder endet.


/KR:text        Ein Komentar und der Text danach werden bis zum Zeilenende gelscht.
/KR: text       Der Komentar wird nicht im Zielfile eingefgt.
                Der Komentar beginnt mit eine bestimmten Zeichen oder einer Zeichenfolge.
                Die Zeichenfolge muss direkt ohne Space nach dem Doppelpunkt sein.


/M              Multiline
                Es werden mehrere Zeilen zusammengefasst. Das Trennzeichen
                ist eine leere Zeile. Manche Logdateien schreiben zwei oder mehr Zeilen pro Ereignis.
                Die Zeilenumbrueche bleiben in der Zieldatei erhalten.


/M:text         Mehrere Zeilen werden zuammengefasst. Das Trennzeichen ist eine Zeile
/M: text        mit einer Zeichenfolge. Die Zeichenfolge kann unmittelbar nach dem Doppelpunkt sein.
                Die Zeilenumbrueche bleiben in der Zieldatei erhalten.


/M#:n           Mehrere Zeilen werden zusammengefasst. Die Anzahl der Zeilen, die
                pro Eintrag geschrieben werden muss immer gleich sein.
                Manche Logdateien bestehen immer aus drei Zeilen pro Eintrag, egal, ob nun
                eine oder zwei Zeilen davon leer sind.




Kombinationen

=============

/z  /zl /w /wl  /g /gl /b /bl /b+ /bl+ /t /tl /t+ /tl+ /az /aw /ag /ab /at /ab+
/at+ /azl /awl /agl /abl /abl+ /atl /atl+ /nz /nw /ng /nb /nb+ /nt /nt+ /nzl
/nwl /ngl /nbl /nbl+ /ntl /ntl+ /a1 /a1l /a2 /a2l /n1l /n2l
Alle Kombinationen koennen auch mit der Option s, r  und der option o angezeigt werden.




BEISPILE:
---------
[C:\] linedif c:\April.txt  c:\Mai.txt c:\Veraenderung.txt  /ab

April und Mai werden verglichen, die Zu und Abnahme kommen in Veraenderung.txt in
alfabetischer Reihenfolge

[C:\]linedif member91.txt member2000.txt newmember.txt /azl /nbhlso lost.txt
  1. Neueintrge werden in newmember.txt geschrieben.
  2. Schreib neue und gelschte Zeilen in lost.txt:
      - die Zeilen sind nach Nummern geordnet
      - die Zeilen haben eine Zeilennummer
      - Neue Zeilen sind mit "++" gelschte mit "--" markiert
      - Leere zeilen und Leerschlge vor dem ersten Buchstaben werden ignoriert
      - Ueberschreibt lost.txt, falls es schon existiert



Konfigurationsdatei:
====================
Diese Datei ist ein ganz normales ASCII File. Also ein ganz normales
Text-file. Dateinamen mit einem Leerschlag wie NEUE DATEI.TXT muessen in Anfuehrungszeichen
aufgefuehrt werden als "NEUE DATEI.TXT". Das Sternzeichen * gilt als Kommentar. Der Rest auf dieser
Zeile wird ignoriert. Der Name, sowie die Endung der Konfigurationsdatei und der
Zieldateien haben keinerlei Auswirkungen auf linedif. Es koennen beliebig viele
Konfigurationsdateien erstellt werden.



FAQ
===
Muss ich unbedingt eine Datei2 angeben ?
Ja. Auch wenn nur die Datei1 sortiert werden soll.
Dies auch im Configurationsfile.
Linedif kann nicht wissen, ob man nun nur File 1 sortieren will,
oder ob man Datei2 und das erste Zielfile vergessen hat.

Der Aufruf wrde dann so aussehen:
[C:\]linedif Datei1 Datei1 Datei1.neu /a1s


Muss ich nach Datei2 erst alle Zieldateien angeben oder erst alle Schalter ?
Spielt keine Rolle, Linedif speichert die Reihenfolge der Zieldateien und
die Reihenfolge der Schalter. Erster Schalter mit der ersten Zieldatei,
der zweite Schalter mit der zweiten Zieldatei...Ausnahme sind die Generellen Optionen,
dort muss die Zieldatei direkt nach dem Schalter sein.


Bis zu welcher Dateigroesse kann ich linedif.exe einsetzen?
Bis zu 1 Mio Zeilen. Und bis zu ca 90 MB.


Nach dem Sortieren bekomme ich eine leere Datei. Wieso?
Leerzeilen werden an den Anfang gesetzt. Der Text ist weiter unten.


Ueberschreibt linedif vorhandene Dateien ?
Nein, linedif bricht ab, ausser man verwendet den Schalter 'o'


Wieso?
Weil ich der Ansicht bin, das eine Datei zu ueberschreiben fuehrt zu einem
groesseren Schaden, als alle alten Datein erst zu loeschen.


Wieso solch eine komische Syntax ?
Dadurch kann man in einem Aufruf alle Auswertungsmglichkeiten durchfhren.
Sonst msste man fr jede Mglichkeit Linedif ein weiteres mal starten.



Aenderungen
============
Aenderungen  1. 07
    verbessertes Errorhandling
    Bessere Dokumentation


To do
======
Vorschlge, ideen ??




Danksagung
==========
Besonderer Dank gilt den Leuten, die mich untersttz haben.
Cornelis Bockemuehl dem Autor von PMAS - Programmierung
Peter Skye - Upload und Uebersetzung
Peter Koller - Uebersetzung und Verbesserungsvorschlge fr die nchste Dokumentation.


Autor
-----
Fritz Schori
Riedmatt 10
6300 Zug Schweiz
fritz@os2force.ch

Bug reports und Wnsche sind erbeten.


