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-Key: 498642

Url: https://administrator.de/contentid/498642

Printed on: May 6, 2024 at 08:05 o'clock

Member: erikro
erikro Sep 27, 2019 at 06:40:37 (UTC)
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
Mitglied: 140913
140913 Sep 27, 2019 updated at 08:53:06 (UTC)
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.
Member: dergringo73
dergringo73 Sep 27, 2019 at 11:58:25 (UTC)
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??
Mitglied: 140913
Solution 140913 Sep 27, 2019 updated at 12:36:02 (UTC)
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!
Member: dergringo73
dergringo73 Sep 27, 2019 at 14:17:56 (UTC)
Goto Top
Mache ich ;) Danke dir ganz herzlich ;)