dergringo73
Goto Top

Batch: CSV Liste mit CSV Liste abgleichen

Hallo ich bin neu hier und habe ein Problem.

Ich habe mir vor Jahren mal ein Batch Script zusammengebastelt um eine .csv Liste (alledaten.csv) nach Werten (vorhanden.csv) durchsuchen zu lassen und jede gefundene Zeile in eine andere Liste (fertig.csv) zu schreiben.

Nun habe ich das Problem das in der Uhrsprungsliste (alledaten.csv) die gesuchten Daten teilweise häufiger vorkommen. In der fertigen Liste (fertig.csv) soll aber immer nur der 1. Fund auftauchen.

findstr /ig:"c:\daten\vorhanden.csv" "c:\daten\alledaten.csv" >"c:\daten\fertig.csv"  


In der vorhanden.csv stehen nur Zeile für Zeile die EAN Nummern

In der alledaten.csv stehen 5 Spalten mit Daten gefolgt von der EAN Spalte und 3 weiteren Spalten.

In der fertig.csv soll am Ende jeweils die 1. komplette Zeile (der vorhanden.csv) stehen wenn eine EAN aus vorhanden.csv auftauch.

Leider bekomme ich es alleine absolut nicht hin.

Content-ID: 498642

Url: https://administrator.de/forum/batch-csv-liste-mit-csv-liste-abgleichen-498642.html

Ausgedruckt am: 11.04.2025 um 17:04 Uhr

erikro
erikro 27.09.2019 um 08:40:37 Uhr
Goto Top
Moin,

ich muss gleich los. Deshalb erstmal nur der Hinweis: Nimm die Powershell. Die hat eigene Befehle für die Behandlung der CSVs, die einem das Leben erheblich erleichtern. Guckst Du zum Einlesen hier: https://www.msxfaq.de/code/powershell/pscsv.htm

Vor Kurzem gab es mal einen ähnlichen Thread, in dem ich eine ungeteste Lösung gepostet habe. Vielleicht hilft die ja.
Excel - Nummer Suchen in CSV und ganze Zeile in neue Datei kopieren

Liebe Grüße

Erik
140913
140913 27.09.2019 aktualisiert um 10:53:06 Uhr
Goto Top
Mach es direkt mit der PS

Ausgangslage:

alledaten.csv
EAN;Spalte2;Spalte3
100;cc;cc
200;dd;dd
300;ee;ee

vorhanden.csv
EAN
100
300

Script
$csv1 = Import-CSV 'C:\daten\alledaten.csv' -Delimiter ";"  
$csv2 = Import-CSV 'C:\daten\vorhanden.csv' -Delimiter ";"  
Compare $csv1 $csv2 -Property EAN -IncludeEqual -ExcludeDifferent -PassThru | select * -ExcludeProperty SideIndicator | export-csv 'C:\daten\fertig.txt' -Delimiter ";" -NoType  

Ergebnis
EAN;Spalte2;Spalte3
100;cc;cc
300;ee;ee

In der fertig.csv soll am Ende jeweils die 1. komplette Zeile (der vorhanden.csv) stehen wenn eine EAN aus vorhanden.csv auftauch.
Den Satz lese dir nochmal selbst durch face-smile, der ist sinnlos, hast wohl deine eigenen Bezeichnungen verwechselt.
dergringo73
dergringo73 27.09.2019 um 13:58:25 Uhr
Goto Top
Hallo Psuser
Als erstes vielen Dank für das Script. Es klappt super wenn über beiden Spalten EAN drüber steht. Leider ist das bei mir aber nicht der Fall. In der vorhanden.csv ist die 1 und in der alledaten.csv die 6 (für Spalte6)

geht das leicht zu ändern das einfach immer die jeweilige Spalte genommen wird??
140913
Lösung 140913 27.09.2019 aktualisiert um 14:36:02 Uhr
Goto Top
Kein Problem
$csv1 = Import-CSV 'C:\daten\alledaten.csv' -Delimiter ";" | Select *,@{n='EAN';e={$_.6}}  
$csv2 = Import-CSV 'C:\daten\vorhanden.csv' -Delimiter ";" | Select *,@{n='EAN';e={$_.1}}  
Compare $csv1 $csv2 -Property EAN -IncludeEqual -ExcludeDifferent -PassThru | select * -ExcludeProperty SideIndicator,EAN | export-csv 'C:\daten\fertig.csv' -Delimiter ";" -NoType -Encoding UTF8  

Das nächste mal bitte gleich im Ursprungspost alle Details nennen, wir können von hier aus nicht in deine Birne sehen!
dergringo73
dergringo73 27.09.2019 um 16:17:56 Uhr
Goto Top
Mache ich ;) Danke dir ganz herzlich ;)