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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 281051
Url: https://administrator.de/contentid/281051
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
5 Kommentare
Neuester Kommentar
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