richardb

Doppelte (3,4,5-fache...) Zeilen aus csv datei entfernen

Hallo Forum,

nachdem ich letztens hier tolle Hilfe bekommen habe stehe ich jetzt vor einem neuen Problem dass ich leider nicht alleine gelöst bekomme:

Ich habe eine CSV Datei mit folgenden Aufbau:

7.87815,49.171267,"S3W0QA"
7.7283,49.086917,"S4W0QA"
7.602317,49.108617,"S5W0QA"
7.761333,49.256583,"S6W0QA"
7.87815,49.171267,"S3W0QA"
7.7283,49.086917,"S4W0QA"
8.106033,49.347967,"XXVZVG :Parkplatz Königsmühle"
7.602317,49.108617,"S5W0QA"
7.761333,49.256583,"S6W0QA"
7.87815,49.171267,"S3W0QA"
7.7283,49.086917,"S4W0QA"

Als Ergebniss sollte dies hier herauskommen:

7.87815,49.171267,"S3W0QA"
7.7283,49.086917,"S4W0QA"
7.602317,49.108617,"S5W0QA"
7.761333,49.256583,"S6W0QA"
8.106033,49.347967,"XXVZVG :Parkplatz Königsmühle"

Versucht habe ich dass zu lösen mit folgendem Batch:


FOR /f "tokens=1" %%f IN (acache.csv) DO call :ausgabe %%f
goto :eof
:ausgabe
goto :eof

Leider funktioniert dass ganze nicht face-sad es wird zwar eine Datei erstellt aber die doppelten Zeilen sind immer noch vorhanden...

Irgendwie möchte der Knoten nicht platzen..Währe toll wenn mir da mal jemand einen Tipp geben könnte.

Grüsse
RichardB
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 109779

Url: https://administrator.de/forum/doppelte-3-4-5-fache-zeilen-aus-csv-datei-entfernen-109779.html

Ausgedruckt am: 08.05.2025 um 23:05 Uhr

bastla
bastla 23.02.2009 um 16:42:34 Uhr
Goto Top
Hallo RichardB!

Das Problem sind die enthaltenen Anführungszeichen - diese musst Du für eine Suche mit einem vorangestellten "\" maskieren.

Der folgende Code setzt einen Satzaufbau aus 3 Feldern, von denen nur das letzte unter Anführungszeichen steht, voraus. Das Feldtrennzeichen ist als %Delim% festzulegen.

@echo off & setlocal
set "Alt=acache.csv"  
set "Neu=acacheneu.csv"  
set "Delim=,"  

if exist "%Neu%" del "%Neu%"  
for /f "usebackq tokens=1-3 delims=%Delim%" %%a in ("%Alt%") do findstr "%%a%Delim%%%b%Delim%\"%%~c\"" "%Neu%">nul 2>nul || >>"%Neu%" echo %%a%Delim%%%b%Delim%%%c  
Grüße
bastla

P.S.: Ohne die Berücksichtigung von Anführungszeichen hätte ein Oneliner direkt von der Kommandozeile genügt (zumindest, wenn es die Datei "acacheneu.csv " noch nicht gibt face-wink):
FOR /f "delims=" %f IN (acache.csv) DO findstr "%f" acacheneu.csv>nul 2>nul || >>acacheneu.csv echo %f
RichardB
RichardB 23.02.2009 um 17:02:53 Uhr
Goto Top
face-smileface-smileface-smile
Hallo Bastla,

Die " sind also schuld...da wäre ich nicht dahinter gekommen...

Vielen Dank für die schnelle Hilfe!!!

Grüsse
Richard
bastla
bastla 23.02.2009 um 17:14:50 Uhr
Goto Top
Hallo RichardB!

Noch ein Nachtrag: Eigentlich sollte (auch wenn vermutlich die Wahrscheinlichkeit gering ist, dass eine Zeile zur Gänze in einer anderen enthalten ist) die gesamte Zeile verglichen werden - dazu wäre noch ein "/x" für das "findstr" nötig. Die Zeile "7 neu" sähe dann so aus:
for /f "usebackq tokens=1-3 delims=%Delim%" %%a in ("%Alt%") do findstr /x "%%a%Delim%%%b%Delim%\"%%~c\"" "%Neu%">nul 2>nul || >>"%Neu%" echo %%a%Delim%%%b%Delim%%%c
Grüße
bastla
RichardB
RichardB 23.02.2009 um 20:14:47 Uhr
Goto Top
Hallo bastla,

danke für den Hinweis...wenn ich dieses /x einsetze dann löscht er mir allerdings die Zeilen mit dem Langtext zwischen den " nicht...ohne /x löscht er einige kpl.

Ich kann da keine `Logik` drin sehen face-sad
bastla
bastla 23.02.2009 um 20:25:18 Uhr
Goto Top
Hallo RichardB!

Als schwacher Trost: Mit den von Dir geposteten Beispieldaten gab es in dieser Hinsicht keine Probleme ...

Sind ev noch irgendwelche Sonderzeichen im Spiel?

Grüße
bastla