Textdateien vergleichen und fehlende Zeilen in neuer Datei ausgeben
Hallo ihr Lieben!
Ich habe eine Textdatei1, welche ich mit einer anderen Textdatei2 vergleichen möchte. Die Zeilen sind in den Dateien unterschiedlich angeordnet. Also möchte ich jede Zeile aus Textdatei1 mit den Zeilen aus Textdatei2 vergleichen. Ist die Zeile vorhanden, passt es. Ist sie nicht vorhanden, soll die Zeile aus Textdatei1 in eine neue Datei ausgegeben werden (am besten mit Zeilennummern).
Also so ungefähr:
Textdatei1.txt:
1. BEFEHL_A
2. BEFEHL_B
3. BEFEHL_C
Textdatei2.txt:
1. BEFEHL_A
2. BEFEHL_C
Textdatei3.txt:
1. Zeile 2: BEFEHL_B
Ich habe schon versucht das mit findstr zu machen, aber meine Dateien sind zu groß (ungefähr 300 Zeilen).
Habt ihr eine Lösung, vielleicht mit einer For-Schleife.
Ich bin leider ziemlich ratlos.
Gruß Laily89
Ich habe eine Textdatei1, welche ich mit einer anderen Textdatei2 vergleichen möchte. Die Zeilen sind in den Dateien unterschiedlich angeordnet. Also möchte ich jede Zeile aus Textdatei1 mit den Zeilen aus Textdatei2 vergleichen. Ist die Zeile vorhanden, passt es. Ist sie nicht vorhanden, soll die Zeile aus Textdatei1 in eine neue Datei ausgegeben werden (am besten mit Zeilennummern).
Also so ungefähr:
Textdatei1.txt:
1. BEFEHL_A
2. BEFEHL_B
3. BEFEHL_C
Textdatei2.txt:
1. BEFEHL_A
2. BEFEHL_C
Textdatei3.txt:
1. Zeile 2: BEFEHL_B
Ich habe schon versucht das mit findstr zu machen, aber meine Dateien sind zu groß (ungefähr 300 Zeilen).
Habt ihr eine Lösung, vielleicht mit einer For-Schleife.
Ich bin leider ziemlich ratlos.
Gruß Laily89
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 150811
Url: https://administrator.de/contentid/150811
Ausgedruckt am: 23.11.2024 um 07:11 Uhr
31 Kommentare
Neuester Kommentar
Hallo Laily89 und willkomme im Forum!
Sollten die Zeilen in Deinen Dateien nicht wie dargestellt eine lfd Nr enthalten, also etwa:
<code type="plain"A>BEFEHL_A
BEFEHL_B
BEFEHL_C
sollte eigentlich
genügen - bis auf die Tatsache, dass das Ergebnis dann so aussähe:
Anderenfalls wäre tatsächlich eine "
Grüße
bastla
Sollten die Zeilen in Deinen Dateien nicht wie dargestellt eine lfd Nr enthalten, also etwa:
<code type="plain"A>BEFEHL_A
BEFEHL_B
BEFEHL_C
sollte eigentlich
findstr /n /v /g:"D:\Textdatei2.txt" "D:\Textdatei1.txt">"D:\Textdatei3.txt"
2:BEFEHL_B
for /f
"-Schleife nötig ...Grüße
bastla
Hallo,
nachdem ich hier viel gelesen habe und mir das Board schon viel hilfe geleistet hat, muss ich jetzt dann doch mal eine Frage stellen.
Und zwar benötige ich eine bat datei, die 2 textdateien vergleicht.
Oki, das ist einfach aber ich brauche es kompliziert.
Beispiel:
text-neu.txt und text-alt.txt
Beide Dateien haben viel zeichen und sollten Zeilenweise kontrolliert werden.
Aber jetzt zu dem großen Problem:
Ich brauche einmal die ausgabe was in der text-neu.txt mehr vorhanden ist als in der text-alt.txt. dies soll z.B. in der neu.txt gespeichert werden.
Dann brauche ich noch eine Ausgabe, was in der text-alt.txt mehr vorhanden ist, als in der text-neu.txt. dies soll dann in der alt.txt gespeichert werden.
Und ich brüchte die kompletten Zeilen als unterschiede. Also nicht nur, zeile 1 unterschied, sonder die komplette zeile 1 soll in der z.B. alt.txt angezeigt werden.
Und es sollte noch in einer extra datei angezeigt werden, ob sich innerhalb der gelciehn Zeilen etwas geändert hat.
Ich hoffe dies wäre mit einer bat Datei zu lösen, denn zu mehr reichen meine Kentnisse leider nicht.
Ich danke schon mal im vorraus.
Gruß
nachdem ich hier viel gelesen habe und mir das Board schon viel hilfe geleistet hat, muss ich jetzt dann doch mal eine Frage stellen.
Und zwar benötige ich eine bat datei, die 2 textdateien vergleicht.
Oki, das ist einfach aber ich brauche es kompliziert.
Beispiel:
text-neu.txt und text-alt.txt
Beide Dateien haben viel zeichen und sollten Zeilenweise kontrolliert werden.
Aber jetzt zu dem großen Problem:
Ich brauche einmal die ausgabe was in der text-neu.txt mehr vorhanden ist als in der text-alt.txt. dies soll z.B. in der neu.txt gespeichert werden.
Dann brauche ich noch eine Ausgabe, was in der text-alt.txt mehr vorhanden ist, als in der text-neu.txt. dies soll dann in der alt.txt gespeichert werden.
Und ich brüchte die kompletten Zeilen als unterschiede. Also nicht nur, zeile 1 unterschied, sonder die komplette zeile 1 soll in der z.B. alt.txt angezeigt werden.
Und es sollte noch in einer extra datei angezeigt werden, ob sich innerhalb der gelciehn Zeilen etwas geändert hat.
Ich hoffe dies wäre mit einer bat Datei zu lösen, denn zu mehr reichen meine Kentnisse leider nicht.
Ich danke schon mal im vorraus.
Gruß
Hallo inspiration und willkommen im Forum!
Teil 1 Deiner Frage ist soweit nachvollziehbar und etwa so zu lösen:
In den neu entstandenen Dateien befinden sich die kompletten Zeilen, die (so) in der jeweils anderen Datei nicht enthalten sind.
Grüße
bastla
Teil 1 Deiner Frage ist soweit nachvollziehbar und etwa so zu lösen:
findstr /v /g:"D:\text-alt.txt" "D:\text-neu.txt">"D:\neu.txt"
findstr /v /g:"D:\text-neu.txt" "D:\text-alt.txt">"D:\alt.txt"
Und es sollte noch in einer extra datei angezeigt werden, ob sich innerhalb der gelciehn Zeilen etwas geändert hat.
Wenn sich etwas geändert hat, sind die Zeilen nicht mehr gleich und daher in "alt.txt" bzw "neu.txt" enthalten - nach welchem Kriterium wäre denn zu unterscheiden, ob es sich um eine geänderte oder eine zusätzliche Zeile handelt?Grüße
bastla
Ja Guten Morgen,
um die Uhrzeit schon eine Antwort zu bekommen, ist ja einfach nur WOW !!!! VIELEN VIELEN DANK !!!
Das Problem ist, das ich in neu.txt nur neu dazu gekommene Zeilen bräuchte.
In der alt.txt bräuchte ich dann die Zeilen, die in der text-neu.txt, nicht mehr vorhanden ist.
Und in einer neuen datei z.B. Unterschied.txt bräuchte ich einen abgleich der bei beiden existierenden zeilen, ob es dort innerhalb der Zeilen einen unterschied gibt ?
Ich hoffe das ist jetzt verständlicher geschrieben.
Also vielen dank nochmal.
um die Uhrzeit schon eine Antwort zu bekommen, ist ja einfach nur WOW !!!! VIELEN VIELEN DANK !!!
Das Problem ist, das ich in neu.txt nur neu dazu gekommene Zeilen bräuchte.
In der alt.txt bräuchte ich dann die Zeilen, die in der text-neu.txt, nicht mehr vorhanden ist.
Und in einer neuen datei z.B. Unterschied.txt bräuchte ich einen abgleich der bei beiden existierenden zeilen, ob es dort innerhalb der Zeilen einen unterschied gibt ?
Ich hoffe das ist jetzt verständlicher geschrieben.
Also vielen dank nochmal.
Hallo inspiration!
Mir fehlt weiterhin (vielleicht würde es ja ein konkretes Beispiel deutlicher machen) ein Kriterium, anhand dessen ich entscheiden kann, ob eine Zeile der "text-neu.txt" nur verändert oder doch neu ist (in beiden Fällen gibt es ja in "text-alt.txt" keine gleichlautende Zeile) ...
Grüße
bastla
Mir fehlt weiterhin (vielleicht würde es ja ein konkretes Beispiel deutlicher machen) ein Kriterium, anhand dessen ich entscheiden kann, ob eine Zeile der "text-neu.txt" nur verändert oder doch neu ist (in beiden Fällen gibt es ja in "text-alt.txt" keine gleichlautende Zeile) ...
Grüße
bastla
oki, jetzt versuche ich es mal mit einem Beispiel:
text-alt.txt schaut so aus.
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
text-neu.txt schau so aus
11111 Ritter der Kokosnuss Columbia SPHE [ UMD-Video DV D 25 25 1
11113 LALELU Columbia SPHE [ UMD-Video DV D 25 25 1
so, jetzt soll in der neu.txt drin stehen, das z.B. 11113 LALELU ... (aber die komplette Zeile) in der text-alt.txt nicht vorhanden ist.
in der alt.txt soll jetzt stehen, das z.B. 11112 Punisher, The .... (aber die komplette Zeile)in der text-neu.txt nicht vorhanden ist.
(mit findstr /G:"Datei" bekomme ich folgende Fehlermeldung: Suchzeichenfolge zu lang)
aber jetzt brauche ich auch noch eine Datei, wo mir eventuelle abweichungen an beliebigen stellen angezeigt werden.
(Z.B. hier jeweils Zeile eins, 9. Spalte, text-alt.txt = 22 aber bei text-neu.txt = 25 )
Ich hoffe das es jetzt (endlich) etwas verständlicher geschrieben ist.
text-alt.txt schaut so aus.
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
text-neu.txt schau so aus
11111 Ritter der Kokosnuss Columbia SPHE [ UMD-Video DV D 25 25 1
11113 LALELU Columbia SPHE [ UMD-Video DV D 25 25 1
so, jetzt soll in der neu.txt drin stehen, das z.B. 11113 LALELU ... (aber die komplette Zeile) in der text-alt.txt nicht vorhanden ist.
in der alt.txt soll jetzt stehen, das z.B. 11112 Punisher, The .... (aber die komplette Zeile)in der text-neu.txt nicht vorhanden ist.
(mit findstr /G:"Datei" bekomme ich folgende Fehlermeldung: Suchzeichenfolge zu lang)
aber jetzt brauche ich auch noch eine Datei, wo mir eventuelle abweichungen an beliebigen stellen angezeigt werden.
(Z.B. hier jeweils Zeile eins, 9. Spalte, text-alt.txt = 22 aber bei text-neu.txt = 25 )
Ich hoffe das es jetzt (endlich) etwas verständlicher geschrieben ist.
Hallo inspiration!
Vorweg: Die Fehlermeldung deutet darauf hin, dass es sich um umfangreichere Dateien handelt - wieviele Zeilen mit welcher Zeichenanzahl sind zu erwarten?
Hinsichtlich des skizzierten Entscheidungskriteriums "Nummer" (11111, 11112, etc): Ist dieser Wert in jeder Zeile vorhanden, immer durch ein Leerzeichen vom Rest der Zeile getrennt, mit einer festen Stellenanzahl?
Grüße
bastla
Vorweg: Die Fehlermeldung deutet darauf hin, dass es sich um umfangreichere Dateien handelt - wieviele Zeilen mit welcher Zeichenanzahl sind zu erwarten?
Hinsichtlich des skizzierten Entscheidungskriteriums "Nummer" (11111, 11112, etc): Ist dieser Wert in jeder Zeile vorhanden, immer durch ein Leerzeichen vom Rest der Zeile getrennt, mit einer festen Stellenanzahl?
(Z.B. hier jeweils Zeile eins, 9. Spalte, text-alt.txt = 22 aber bei text-neu.txt = 25 )
Und wie würde der Inhalt dieser Datei dann für dieses Beispiel aussehen? "Beliebig" auf die Spaltennummer zu beziehen kann, ganz nebenbei, vermutlich für eine Massenverarbeitung auch nicht funktionieren, wenn sich die Spaltenanzahl von Zeile zu Zeile ändern kann ...Grüße
bastla
Hallo,
es sind mehr als 5000 Zeilen enthalten. und jede Zeile schätzungsweise mit mind. 60 Zeichen.
Frage 1:
Die Werte sind immer durch ein " ; " (ohne ") getrennt. Stellenanzahl kann unterschiedlich sein.
Frage 2:
Der Inhalt müsste dann nur die Zeile von der neu-text.txt datei beinhalten. Also 11111 Ritter der Kokosnuss Columbia SPHE [ UMD-Video DV D 25 25 1 .
Damit ich weiß das es in dieser Zeile einen Unterschied zu der alt-text.txt datei gibt.
Ich hoffe das ich das richtig verstanden habe und die fragen korrekt beantwortet habe.
Ich würde auch notfalls was anderes nutzen als eine BAT Datei. Es müsste nur automatisch funktionieren. Gegenfalls auch mit Taskplaner.
Das wäre alles kein Problem. Nur am Ende brauche ich halt diese 3 Dateien. Wie, ist mir ziemlich Wurst. HEHE
Und ich als Programmier-NIX-KÖNNER-UND-NIX-WISSER muss das halt einrichten können.
Gruß
es sind mehr als 5000 Zeilen enthalten. und jede Zeile schätzungsweise mit mind. 60 Zeichen.
Frage 1:
Die Werte sind immer durch ein " ; " (ohne ") getrennt. Stellenanzahl kann unterschiedlich sein.
Frage 2:
Der Inhalt müsste dann nur die Zeile von der neu-text.txt datei beinhalten. Also 11111 Ritter der Kokosnuss Columbia SPHE [ UMD-Video DV D 25 25 1 .
Damit ich weiß das es in dieser Zeile einen Unterschied zu der alt-text.txt datei gibt.
Ich hoffe das ich das richtig verstanden habe und die fragen korrekt beantwortet habe.
Ich würde auch notfalls was anderes nutzen als eine BAT Datei. Es müsste nur automatisch funktionieren. Gegenfalls auch mit Taskplaner.
Das wäre alles kein Problem. Nur am Ende brauche ich halt diese 3 Dateien. Wie, ist mir ziemlich Wurst. HEHE
Und ich als Programmier-NIX-KÖNNER-UND-NIX-WISSER muss das halt einrichten können.
Gruß
Hallo inspiration!
Ich verstehe das dann mal so:
Jeder Datensatz (Zeile) beginnt mit einer Nummer.
Als Trennzeichen zwischen den Feldern des Satzes dient das Semikolon.
Ein Datensatz, der mit der selben Nummer auch in der anderen Datei vorkommt, allerdings unterschiedlichen Inhalt hat, gilt als "geändert" (--> Unterschied.txt).
Ein Datensatz ist unabhängig von seiner Nummer dann "nicht mehr vorhanden", wenn er nur in "text-alt.txt" existiert (--> alt.txt).
Ein Datensatz ist dann neu, wenn seine Nummer höher als die höchste Nummer in "text-alt.txt" ist (--> neu.txt)
Soweit richtig?
Grüße
bastla
Ich verstehe das dann mal so:
Jeder Datensatz (Zeile) beginnt mit einer Nummer.
Als Trennzeichen zwischen den Feldern des Satzes dient das Semikolon.
Ein Datensatz, der mit der selben Nummer auch in der anderen Datei vorkommt, allerdings unterschiedlichen Inhalt hat, gilt als "geändert" (--> Unterschied.txt).
Ein Datensatz ist unabhängig von seiner Nummer dann "nicht mehr vorhanden", wenn er nur in "text-alt.txt" existiert (--> alt.txt).
Ein Datensatz ist dann neu, wenn seine Nummer höher als die höchste Nummer in "text-alt.txt" ist (--> neu.txt)
Soweit richtig?
Grüße
bastla
Hallo,
jetzt kommen wir ja immer näher. Grins
Jeder Datensatz (Zeile) beginnt mit einer Nummer. <- richtig
Als Trennzeichen zwischen den Feldern des Satzes dient das Semikolon. <- richtig
Ein Datensatz, der mit der selben Nummer auch in der anderen Datei vorkommt, allerdings unterschiedlichen Inhalt hat, gilt als "geändert" (--> Unterschied.txt). <- richtig
Ein Datensatz ist unabhängig von seiner Nummer dann "nicht mehr vorhanden", wenn er nur in "text-alt.txt" existiert (--> alt.txt). <- richtig
Ein Datensatz ist dann neu, wenn seine Nummer höher als die höchste Nummer in "text-alt.txt" ist (--> neu.txt) <- falsch
Richtig muss es so sein:
Ein Datensatz ist dann neu, wenn er in der text-neu.txt aber nicht in der text-alt.txt existiert. (-->neu.txt)
jetzt kommen wir ja immer näher. Grins
Jeder Datensatz (Zeile) beginnt mit einer Nummer. <- richtig
Als Trennzeichen zwischen den Feldern des Satzes dient das Semikolon. <- richtig
Ein Datensatz, der mit der selben Nummer auch in der anderen Datei vorkommt, allerdings unterschiedlichen Inhalt hat, gilt als "geändert" (--> Unterschied.txt). <- richtig
Ein Datensatz ist unabhängig von seiner Nummer dann "nicht mehr vorhanden", wenn er nur in "text-alt.txt" existiert (--> alt.txt). <- richtig
Ein Datensatz ist dann neu, wenn seine Nummer höher als die höchste Nummer in "text-alt.txt" ist (--> neu.txt) <- falsch
Richtig muss es so sein:
Ein Datensatz ist dann neu, wenn er in der text-neu.txt aber nicht in der text-alt.txt existiert. (-->neu.txt)
Hallo inspiration!
Das sollte dann so gehen (bzw eher kriechen ):
Zur Information wird jede verarbeitete Zeile auf dem Bildschirm ausgegeben ...
Grüße
bastla
Das sollte dann so gehen (bzw eher kriechen ):
@echo off & setlocal
set "Alt=D:\text-alt.txt"
set "Neu=D:\text-neu.txt"
set "DiffAlt=D:\alt.txt"
set "DiffNeu=D:\neu.txt"
set "Diff=D:\Unterschied.txt"
set "Delim=;"
del "%DiffAlt%" 2>nul
del "%DiffNeu%" 2>nul
del "%Diff%" 2>nul
for /f "usebackq delims=" %%i in ("%Alt%") do echo %%i & findstr /x /c:"%%i" "%Neu%">nul || (
for /f "tokens=1* delims=%Delim%" %%a in ("%%i") do (
findstr /b "%%a%Delim%" "%Neu%">nul && (>>"%Diff%" echo %%i) || (>>"%DiffAlt%" echo %%i)
)
)
for /f "usebackq delims=" %%i in ("%Neu%") do echo %%i & findstr /x /c:"%%i" "%Alt%">nul || (
for /f "tokens=1* delims=%Delim%" %%a in ("%%i") do (
findstr /b "%%a%Delim%" "%Alt%">nul || (>>"%DiffNeu%" echo %%i)
)
)
Grüße
bastla
Hallo inspiration!
[Edit]
Eine Änderung (und nebenbei eine kleine Vereinfachung) ist zwar erforderlich (es sollten ja bei Unterschieden die Zeilen aus der "text-neu..txt" in die "Unterschiede.txt" geschrieben werden) - ersetze dazu die Zeilen ab 13 durch:
aber an der Tatsache, dass (bei meinen Tests) dann auch wirklich nur die passenden Zeilen dort landen, ändert das auch nix ...
@Biber: Das beweist aber wieder nur, dass es besser wäre, am Montag das Haus nicht zu verlassen (Bett wollte ich dann doch nicht schreiben ) ...
[/Edit]
Grüße
bastla
Aber in der unterschied.txt wird außer was in text-alt.txt und text-neu.txt fehlt angezeigt.
Kannst Du das vielleicht übersetzen? [Edit]
Eine Änderung (und nebenbei eine kleine Vereinfachung) ist zwar erforderlich (es sollten ja bei Unterschieden die Zeilen aus der "text-neu..txt" in die "Unterschiede.txt" geschrieben werden) - ersetze dazu die Zeilen ab 13 durch:
for /f "usebackq delims=" %%i in ("%Alt%") do echo %%i & findstr /x /c:"%%i" "%Neu%">nul || (
for /f "delims=%Delim%" %%a in ("%%i") do (
findstr /b "%%a%Delim%" "%Neu%">nul || (>>"%DiffAlt%" echo %%i)
)
)
for /f "usebackq delims=" %%i in ("%Neu%") do echo %%i & findstr /x /c:"%%i" "%Alt%">nul || (
for /f "delims=%Delim%" %%a in ("%%i") do (
findstr /b "%%a%Delim%" "%Alt%">nul && (>>"%Diff%" echo %%i) || (>>"%DiffNeu%" echo %%i)
)
)
@Biber: Das beweist aber wieder nur, dass es besser wäre, am Montag das Haus nicht zu verlassen (Bett wollte ich dann doch nicht schreiben ) ...
[/Edit]
Grüße
bastla
[OT] @bastla
Grüße
Biber
[/OT]
Zitat von @bastla:
So sehen Sätze aus, die montags eine vierspurige Hauptverkehrsstrasse überqueren und dabei nicht nach rechts und links schauen..Aber in der unterschied.txt wird außer was in text-alt.txt und text-neu.txt fehlt angezeigt.
Kannst Du das vielleicht übersetzen? Grüße
Biber
[/OT]
ÜBERSETZER:
text-alt.txt schaut so aus.
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
(11112 + 11113 fehlen)
text-neu.txt schau so aus
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
(11115+11116 fehlen)
unterscheid.txt sieht dann wie folgt aus:
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
also er zeigt nur das an, was in beiden gleich ist !!
(habe mir meinen text auch nochmal durchgelesen, und wüßte auch nicht, was ich damit mein, HEHE)
text-alt.txt schaut so aus.
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
(11112 + 11113 fehlen)
text-neu.txt schau so aus
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
(11115+11116 fehlen)
unterscheid.txt sieht dann wie folgt aus:
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
also er zeigt nur das an, was in beiden gleich ist !!
(habe mir meinen text auch nochmal durchgelesen, und wüßte auch nicht, was ich damit mein, HEHE)
Hallo inspiration!
Sorry - in beiden Versionen entsteht mit diesen Testdaten bei mir überhaupt keine "Unterschied.txt":
Grüße
bastla
Sorry - in beiden Versionen entsteht mit diesen Testdaten bei mir überhaupt keine "Unterschied.txt":
D:\>type text-alt.txt
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
D:\>type text-neu.txt
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
D:\>auswertung
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
D:\>type alt.txt
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
D:\>type neu.txt
11112 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11113 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
D:\>type unterschied.txt
Das System kann die angegebene Datei nicht finden.
bastla
Deine Änderung habe ich natürlich nicht gelesen. Wollte gerade nochmal die Daten vom 1.Post kopieren und dann habe ich die änderung erst gesehn.
Was soll ich sagen ? GENIAL.
Ich kann meinen Dank hier nicht genug ausdrücken. Ich bin einfach nur baff.
Mir fehlen echt die Worte. Heute angemeldet, freundlich empfangen worden und SOFORT geholfen.
Das findet man sehr wenig heutzutage,
VIELEN VIELEN DANK !!!!!
Was soll ich sagen ? GENIAL.
Ich kann meinen Dank hier nicht genug ausdrücken. Ich bin einfach nur baff.
Mir fehlen echt die Worte. Heute angemeldet, freundlich empfangen worden und SOFORT geholfen.
Das findet man sehr wenig heutzutage,
VIELEN VIELEN DANK !!!!!
Folgendes Problem gibt es leider doch noch:
text-alt.txt
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
text-neu.txt
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
(also beide Dateien komplett identisch)
bekomme ich eine Unterschied.txt mit folgendem Inhalt:
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
text-alt.txt
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
text-neu.txt
11111 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11114 Punisher, The Columbia SPHE [ Video DV B 25 25 0
11115 Ritter der Kokosnuss Columbia SPHE [ Video DV D 22 25 1
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
(also beide Dateien komplett identisch)
bekomme ich eine Unterschied.txt mit folgendem Inhalt:
11116 Punisher, The Columbia SPHE [ Video DV B 25 25 0
Nachtrag: Das Problem dürfte darauf zurückzuführen sein, dass die jeweilige letzte Zeile nicht mit einer Zeilenschaltung endet - das sollte sich aber möglichst bereits bei der Entstehung der Dateien entsprechend ändern lassen ...
Anzumerken wäre übrigens noch, dass das Trennzeichen in den verwendeten Beispielen nicht ";", sondern ein Leerzeichen war - insofern wäre (der Ordnung halber, aber auf jeden Fall, wenn es Nummern mit unterschiedlicher Stellenanzahl gäbe) die Zeile 7 entsprechend anzupassen.
Grüße
bastla
Anzumerken wäre übrigens noch, dass das Trennzeichen in den verwendeten Beispielen nicht ";", sondern ein Leerzeichen war - insofern wäre (der Ordnung halber, aber auf jeden Fall, wenn es Nummern mit unterschiedlicher Stellenanzahl gäbe) die Zeile 7 entsprechend anzupassen.
Grüße
bastla
Dann könntest Du mit
eine Zeilenschaltung hinzufügen (Achtung: 2 ">" sowie keine Leerzeichen!) ...
In den Batch integriert etwa so:
Auf diese Art wird nur mit temporären Kopien der Orignialdateien gearbeitet.
Grüße
bastla
echo\>>"text-alt.txt"
In den Batch integriert etwa so:
@echo off & setlocal
set "AltOriginal=D:\text-alt.txt"
set "NeuOriginal=D:\text-neu.txt"
set "DiffAlt=D:\alt.txt"
set "DiffNeu=D:\neu.txt"
set "Diff=D:\Unterschied.txt"
set "Delim=;"
set "Alt=%temp%\text-alt.tmp"
set "Neu=%temp%\text-neu.tmp"
copy "%AltOriginal%" "%Alt%">nul
copy "%NeuOriginal%" "%Neu%">nul
echo\>>"%Alt%"
echo\>>"%Neu%"
del "%DiffAlt%" 2>nul
del "%DiffNeu%" 2>nul
del "%Diff%" 2>nul
for /f "usebackq delims=" %%i in ("%Alt%") do echo %%i & findstr /x /c:"%%i" "%Neu%">nul || (
for /f "delims=%Delim%" %%a in ("%%i") do (
findstr /b /c:"%%a%Delim%" "%Neu%">nul || (>>"%DiffAlt%" echo %%i)
)
)
for /f "usebackq delims=" %%i in ("%Neu%") do echo %%i & findstr /x /c:"%%i" "%Alt%">nul || (
for /f "delims=%Delim%" %%a in ("%%i") do (
findstr /b /c:"%%a%Delim%" "%Alt%">nul && (>>"%Diff%" echo %%i) || (>>"%DiffNeu%" echo %%i)
)
)
del "%Alt%"
del "%Neu%"
Grüße
bastla
Hallo inspiration!
Dass Deine (wie die mir zugesandten Beispieldaten zeigen) Zeilen >= 1500 Zeichen umfassen können (was zwar die oben getätigte Aussage
eigentlich schon herausfinden können ...
Damit ist dann Batch aber nicht mehr unbedingt das geeignetste Werkzeug - ich werde das später mal mit VBS versuchen ...
Grüße
bastla
Dass Deine (wie die mir zugesandten Beispieldaten zeigen) Zeilen >= 1500 Zeichen umfassen können (was zwar die oben getätigte Aussage
jede Zeile schätzungsweise mit mind. 60 Zeichen.
nicht falsifiziert, aber doch etwas unvermutet kommt) und damit "findstr
" überfordern, hättest Du anhand der FehlermeldungenFINDSTR: Suchzeichenfolge zu lang.
Damit ist dann Batch aber nicht mehr unbedingt das geeignetste Werkzeug - ich werde das später mal mit VBS versuchen ...
Grüße
bastla
Hallo inspiration!
Versuch es mit der VBS-Variante:
Grüße
bastla
Versuch es mit der VBS-Variante:
Alt = "text-alt.txt"
Neu = "text-neu.txt"
DiffAlt = "alt.txt"
DiffNeu = "neu.txt"
Diff = "unterschied.txt"
Delim = ";"
Set fso = CreateObject("Scripting.FileSystemObject")
Set a = CreateObject("Scripting.Dictionary")
Set Datei = fso.OpenTextFile(Alt)
Do Until Datei.AtEndOfStream 'alle "alten" Sätze in Dictionary mit "Nummer" (=1. Feld) als Key aufnehmen
Satz = Datei.ReadLine
Nummer = Split(Satz, Delim)(0)
a.Add Nummer, Satz
Loop
Datei.Close
Set NeuAus = fso.CreateTextFile(DiffNeu)
Set DiffAus = fso.CreateTextFile(Diff)
Set Datei = fso.OpenTextFile(Neu)
Do Until Datei.AtEndOfStream 'alle neuen Sätze einlesen und gleich auswerten
Satz = Datei.ReadLine
Nummer = Split(Satz, Delim)(0)
If Not a.Exists(Nummer) Then '"neuer" Satz
NeuAus.WriteLine Satz 'in Datei schreiben
Else
If Satz <> a.Item(Nummer) Then DiffAus.WriteLine(Satz) '"veränderter" Satz
a.Remove(Nummer) 'Satz erledigt und daher aus Dictionary entfernen
End If
Loop
Datei.Close
DiffAus.Close
NeuAus.Close
fso.CreateTextFile(DiffAlt).Write Join(a.Items, vbCrLf) & vbCrLf 'verbliebene "alte" Sätze schreiben
bastla
Jetzt habe ich nich ein kleines Problem.
Wie kann ich jetzt in einer Bat Datei mehrere VBS starten ?
Mein Problem:
Habe dein Script als VBS angelegt. geht auch super.
Erstelle ich eine bat Datei wo das Script gestartet werden soll, funktionierts auch.
Erstelle ich jetzt eine Bat Datei, in der 2x das Script (an unterschiedlichen stellen) zum ausführen angesprochen wird, gibts ne Fehlermeldung.
Danke schon mal für Eure Antworten.
Wie kann ich jetzt in einer Bat Datei mehrere VBS starten ?
Mein Problem:
Habe dein Script als VBS angelegt. geht auch super.
Erstelle ich eine bat Datei wo das Script gestartet werden soll, funktionierts auch.
Erstelle ich jetzt eine Bat Datei, in der 2x das Script (an unterschiedlichen stellen) zum ausführen angesprochen wird, gibts ne Fehlermeldung.
Danke schon mal für Eure Antworten.