Batch: Erste Stellen von zwei aufeinander folgenden Zeilen derselben Textdatei vergleichen
Hallo mal wieder,
meine derzeitige Arbeit erfordert leider viele Vergleiche von verschiedenen Dateien und nun also auch innerhalb derselben Datei. Ich bin kein großer Batch-Freak und musste nun schon häufiger hier fragen stellen - herzlichen Dank an alle, die mir bisher so wunderbar weitergeholfen haben!
Mein heutiges Problem besteht darin: Wenn in einer Datei (2 GB) in zwei aufeinanderfolgenden Zeilen die ersten 7 Stellen identisch sind, handelt es sich um einen Fehler. In diesem Fall möchte ich eine der beiden Zeilen in eine Zieldatei kopieren, denn am Zeilenende steht ein Identifikator, mit dem ich genauere Fehleranalyse betreiben kann. Welche der beiden Zeilen in die Zieldatei geschrieben werden, ist egal.
Meine bisherige Idee, die mich noch zu keinem endgültigen Ergebnis gebracht hat, lautet:
Wahrscheinlich habe ich noch irgendwo die Ausrufungszeichen falsch gesetzt? Rein vom Ablauf her sollte doch alles stimmen, oder was übersehe ich gerade?
Herzlichen Dank schon mal wieder an alle, die das hier kommentieren werden.
Gruß, Olaf
meine derzeitige Arbeit erfordert leider viele Vergleiche von verschiedenen Dateien und nun also auch innerhalb derselben Datei. Ich bin kein großer Batch-Freak und musste nun schon häufiger hier fragen stellen - herzlichen Dank an alle, die mir bisher so wunderbar weitergeholfen haben!
Mein heutiges Problem besteht darin: Wenn in einer Datei (2 GB) in zwei aufeinanderfolgenden Zeilen die ersten 7 Stellen identisch sind, handelt es sich um einen Fehler. In diesem Fall möchte ich eine der beiden Zeilen in eine Zieldatei kopieren, denn am Zeilenende steht ein Identifikator, mit dem ich genauere Fehleranalyse betreiben kann. Welche der beiden Zeilen in die Zieldatei geschrieben werden, ist egal.
Meine bisherige Idee, die mich noch zu keinem endgültigen Ergebnis gebracht hat, lautet:
@echo off
setlocal enabledelayedexpansion
set Quelle=Quelldatei.txt
set Ziel=Zieldatei.txt
set /a var1=0
for /f "tokens=* delims=" %%G in (%Quelle%) do (
set /a var2=%%G
set /a var2=!var2:~0,7!
if !var1!=!var2! then >>"%Ziel%" echo %%G
set /a var1=!var2!
)
Wahrscheinlich habe ich noch irgendwo die Ausrufungszeichen falsch gesetzt? Rein vom Ablauf her sollte doch alles stimmen, oder was übersehe ich gerade?
Herzlichen Dank schon mal wieder an alle, die das hier kommentieren werden.
Gruß, Olaf
Please also mark the comments that contributed to the solution of the article
Content-Key: 281051
Url: https://administrator.de/contentid/281051
Printed on: April 25, 2024 at 01:04 o'clock
5 Comments
Latest comment
Hallo Olaf.
Ungetestet:
Grüße
rubberman
set /a
Ist für numerische Zuweisungen/Berechnungenif !var1!=!var2! ...
Vergleiche mit doppeltem Gleichheitszeichen.... then ...
Falsche Sprache.Ungetestet:
@echo off
setlocal enabledelayedexpansion
set "Quelle=Quelldatei.txt"
set "Ziel=Zieldatei.txt"
set "var1=0"
for /f "usebackq delims=" %%G in ("%Quelle%") do (
set "var2=%%G"
set "var2=!var2:~0,7!"
if "!var1!"=="!var2!" >>"%Ziel%" echo %%G
set "var1=!var2!"
)
rubberman
Hallo Olaf.
Grüße
rubberman
damals mit Unix-Zeilenumbrüchen
Hmm. Das wäre ja ein <LF> (bei Windows, die Kombination <CR><LF>). Das stört die FOR /F Schleife nicht, das <CR> wird dort sowieso ignoriert. Eher war es die obligatorische UTF-8 Codierung bei *nixoiden Betriebssystemen. Wenn es statt UNIX ein altes Mac OS (bis Version 9) gewesen wär, hätte ich es verstanden. Dort ist der Zeilenumbruch ein einzelnes <CR>. Endgültig lässt sich das wohl nun nicht klären, aber Hauptsache es funktioniert ... Grüße
rubberman