Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Zwei CSV Dateien vergleichen und Ergebnisse filtern (evtl. Excel?)
- Ersteller MikE_GRH
- Erstellt am
Piktogramm
Admiral
- Registriert
- Okt. 2008
- Beiträge
- 9.252
Was du vorhast klingt nach einem der typischen Fehler, wenn jemand Datenhandling planen soll, aber Grundlagen beim IT Verständnis fehlen. Die Aufgabe klingt so als würde sie immer wiederkehren, und als wäre sie umfangreicher als deine zwei Artikel aus dem Startpost.
An der Stelle ist es Imho davon abzuraten das mit irgendwelchen GUI-Tools und viel Klickerei machen zu wollen UND sich damit auch den Weg zu gescheiter Automatisierung zu verbauen.
An sich wurden für eben solche Jobs Datenbanken erfunden und weil Datenbanken für sich genommen etwas nutzerunfreundlich sind, bauen darauf ERP Systeme auf.
Zudem in den aller meisten Fällen die Quellen irgendwelcher CSV Dateien die Exporte von Datenbankabfragen sind.
In der Annahme, dass in einer DB zwei Tabellen der Form: ID | quanitity | price vorhanden sind, wobei eine Tabelle "Current" heißt und die Andere "New" sähe eine Abfrage dann so aus. Dazu eine Tabelle eine Tabelle "Stock" die jene Artikel enthält, die du bereits lagernd hast bzw. lagern willst.
Jenachdem wie du die CSV erhältst, lässt sich das Beschaffen der CSV automatisieren, der Import in die Datenbank auch (geht auch eleganter als jedesmal Tabellen neu anzulegen) und das Ausführen der Anfrage an die Datenbank auch. Kein Klicken, kein manuelles Datenhandling, kein Vergessen, problemlos im Minutentakt möglich wenn nötig und wer sich etwas geschickter anstellt bei der Datenablage kann sich auf Kosten von etwas Speicherbedarf auch Verlaufsdaten sichern/auswerten lassen.
An der Stelle ist es Imho davon abzuraten das mit irgendwelchen GUI-Tools und viel Klickerei machen zu wollen UND sich damit auch den Weg zu gescheiter Automatisierung zu verbauen.
An sich wurden für eben solche Jobs Datenbanken erfunden und weil Datenbanken für sich genommen etwas nutzerunfreundlich sind, bauen darauf ERP Systeme auf.
Zudem in den aller meisten Fällen die Quellen irgendwelcher CSV Dateien die Exporte von Datenbankabfragen sind.
In der Annahme, dass in einer DB zwei Tabellen der Form: ID | quanitity | price vorhanden sind, wobei eine Tabelle "Current" heißt und die Andere "New" sähe eine Abfrage dann so aus. Dazu eine Tabelle eine Tabelle "Stock" die jene Artikel enthält, die du bereits lagernd hast bzw. lagern willst.
Code:
SELECT * FROM Stock, Current, NEW
WHERE New.ID = Stock.ID
AND
New.ID = Current.ID
AND
Current.price != New.price
Jenachdem wie du die CSV erhältst, lässt sich das Beschaffen der CSV automatisieren, der Import in die Datenbank auch (geht auch eleganter als jedesmal Tabellen neu anzulegen) und das Ausführen der Anfrage an die Datenbank auch. Kein Klicken, kein manuelles Datenhandling, kein Vergessen, problemlos im Minutentakt möglich wenn nötig und wer sich etwas geschickter anstellt bei der Datenablage kann sich auf Kosten von etwas Speicherbedarf auch Verlaufsdaten sichern/auswerten lassen.
Alle 1000 Zeilen, klar, das ist ja kein Problem für Excel.
Aber du musst wirklich alle 30 Spalten der einen Datei mit den 30 Spalte der anderen Datei vergleichen?
Kannst natürlich nen XVERWEIS für die 30 Spalten einzeln machen. Aber das ist in der Tat zu aufwendig.
Aber du musst wirklich alle 30 Spalten der einen Datei mit den 30 Spalte der anderen Datei vergleichen?
Kannst natürlich nen XVERWEIS für die 30 Spalten einzeln machen. Aber das ist in der Tat zu aufwendig.
Piktogramm
Admiral
- Registriert
- Okt. 2008
- Beiträge
- 9.252
Wenn auf so Grundlagenscheiß aus dem 2. Informatiksemester von Unbedarften KI geschmissen wird, sehe ich echt duster. Solche Problemstellungen waren mit die aller ersten Probleme wo Computer ihre kommerzielle Anwendung fanden, das Problem ist alt, die Lösungen gut abgehangen. Wer da mit KI anfängt hat sooo dermaßen wenig Ahnung, dass die KI den dümmsten Mist erfinden kann und der beauftragenden Person jedwede Grundlage fehlt das Ergebnis bewerten zu können -.- /ranttollertyp schrieb:Wobei diese textbasierten Tools manchmal halt durcheinander kommen - das wäre ein gutes Einsatzgebiet für KI meiner Meinung nach.
Ich meinte damit nicht, dass er da KI anwerfen soll oder es bei ChatGPT reinwerfen soll. So war das nicht gemeint.
Ich meinte damit eher, dass so ein Problem etwas ist, wo ich KI als eine sinnvolles Einsatzgebiet halten würde.
Und dass Textvergleichstools in gewissen Konstellationen gerne auch etwas mehr Intelligenz bekommen könnten.
Und gerade bei einem "abgehangenen Problem" sehe ich eben sogar mehr Potential dafür, dass die KI diese Aufgabe konsequent für einen Lösen kann.
Aber wie gesagt: Das sollte weder Werbung für KI sein, noch eine Empfehlung.
Ich meinte damit eher, dass so ein Problem etwas ist, wo ich KI als eine sinnvolles Einsatzgebiet halten würde.
Und dass Textvergleichstools in gewissen Konstellationen gerne auch etwas mehr Intelligenz bekommen könnten.
Dann nenne die Lösungen.Piktogramm schrieb:Solche Problemstellungen waren mit die aller ersten Probleme wo Computer ihre kommerzielle Anwendung fanden, das Problem ist alt, die Lösungen gut abgehangen.
Und gerade bei einem "abgehangenen Problem" sehe ich eben sogar mehr Potential dafür, dass die KI diese Aufgabe konsequent für einen Lösen kann.
Aber wie gesagt: Das sollte weder Werbung für KI sein, noch eine Empfehlung.
Ergänzung ()
Ja, aber vielleicht nicht zum selben Zeitpunkt.Piktogramm schrieb:Zudem in den aller meisten Fällen die Quellen irgendwelcher CSV Dateien die Exporte von Datenbankabfragen sind.
Piktogramm
Admiral
- Registriert
- Okt. 2008
- Beiträge
- 9.252
@tollertyp
Lösungsvorschlag ist in Post #24 und kam vor dem Rant.
Und nein, KI brauchts da nicht. Weder zum fragen noch zum Ausführen des Jobs. Wie gesagt, es ist absolut abträglich, wenn eine Person mangelnder Expertise sich da unzuverlässige Hilfe holt. Wie beschrieben, der Mangel an Expertiese führt dazu, dass nicht bewertet werden kann, ob die Lösung gescheit ist. Ich würde es gar erweitern, die mangelnde Expertiese sorgt in der Regel zu völlig falschen Fragestellungen. Wie beim TE hier. Es gibt ein Problem und es wird als digitalisierten Papierprozess gedacht an statt auf computerisierte Automatisierung. Wobei Letzteres Technologie der 1960er ist..
Und auch wenn es abgehangen ist. Das was meist etwas Wissen benötigt ist das Gestalten von Prozessen und exaktes Einbinden in bestehende Datenstrukturen. In der Zeit, wo man das so einem aufgeblähtem Musterreplikanten (KI) verklickert hat, hat man in der Regel Prozessgestaltung, Dokumentation und Umsetzung auch per Hand erledigt.
Lösungsvorschlag ist in Post #24 und kam vor dem Rant.
Und nein, KI brauchts da nicht. Weder zum fragen noch zum Ausführen des Jobs. Wie gesagt, es ist absolut abträglich, wenn eine Person mangelnder Expertise sich da unzuverlässige Hilfe holt. Wie beschrieben, der Mangel an Expertiese führt dazu, dass nicht bewertet werden kann, ob die Lösung gescheit ist. Ich würde es gar erweitern, die mangelnde Expertiese sorgt in der Regel zu völlig falschen Fragestellungen. Wie beim TE hier. Es gibt ein Problem und es wird als digitalisierten Papierprozess gedacht an statt auf computerisierte Automatisierung. Wobei Letzteres Technologie der 1960er ist..
Und auch wenn es abgehangen ist. Das was meist etwas Wissen benötigt ist das Gestalten von Prozessen und exaktes Einbinden in bestehende Datenstrukturen. In der Zeit, wo man das so einem aufgeblähtem Musterreplikanten (KI) verklickert hat, hat man in der Regel Prozessgestaltung, Dokumentation und Umsetzung auch per Hand erledigt.
Lösung vs Lösungsvorschlag. Ich habe nach Lösungen für das abgehangene Problem gefragt. Lesen bitte.
Ich sehe deine Lösung, aber passt sie zum Problem?
Habe ich irgendwo geschrieben, dass es KI braucht? Nein. Lern lesen, oder lass es von einer KI vorlesen.
Aber ich bin grundsätzlich bei dir:
Ein textbasierter Dateivergleich ist nicht das optimale. Andere Wege wären besser. Aber da gilt es erst mal herauszufinden, was möglich ist.
Vermutlich würde ich mir ein kleines Programm in C# schreiben, oder, ein PowerShell Script, wenn ich wirklich nur die CSVs hätte.
Hier mein stümperhaft gefrickeltes Powershell-Script:
Die Motivation, alle Artikelnummern in eine Liste zu packen liegt daran, dass ich so hinzugefügte und entfernte Artikel erkennen kann. Geht bestimmt auch anders. Die Liste der Artikelnummern könnte man auch vorher noch sortieren, wenn man wollte.
Man könnte sicher einiges an Redundanz einsparen in dem Script.
Datei 1.csv:
Datei 2.csv:
Ausgabebeispiel:
Ich sehe deine Lösung, aber passt sie zum Problem?
Habe ich irgendwo geschrieben, dass es KI braucht? Nein. Lern lesen, oder lass es von einer KI vorlesen.
Aber ich bin grundsätzlich bei dir:
Ein textbasierter Dateivergleich ist nicht das optimale. Andere Wege wären besser. Aber da gilt es erst mal herauszufinden, was möglich ist.
Vermutlich würde ich mir ein kleines Programm in C# schreiben, oder, ein PowerShell Script, wenn ich wirklich nur die CSVs hätte.
Ergänzung ()
Hier mein stümperhaft gefrickeltes Powershell-Script:
Code:
$file1 = $args[0]
$file2 = $args[1]
$Header = 'Artikelnummer', 'Preis', 'Menge'
$old = Import-Csv -Path $file1 -Delimiter ';' -Header $Header
$new = Import-Csv -Path $file2 -Delimiter ';' -Header $Header
$artikelnummern = [System.Collections.ArrayList]@()
$old | ForEach {
$null = $artikelnummern.Add($_.Artikelnummer);
}
$new | ForEach {
if (!$artikelnummern.Contains($_.Artikelnummer)) {
$null = $artikelnummern.Add($_.Artikelnummer);
}
}
$artikelnummern | ForEach {
$artikelnummer = $_
$rowOld = [System.Linq.Enumerable]::Where($old, [Func[object,bool]]{ param($x) $x.Artikelnummer -eq $_ })
$rowNew = [System.Linq.Enumerable]::Where($new, [Func[object,bool]]{ param($x) $x.Artikelnummer -eq $_ })
$unterschiede = [System.Collections.ArrayList]@()
if ($rowOld.Count -ne 1) {
$preis = $rowNew.Preis
$menge = $rowNew.Menge
Write-Host "${artikelnummer};${preis};${menge} - Hinzugekommen"
} elseif ($rowNew.Count -ne 1) {
$preis = $rowOld.Preis
$menge = $rowOld.Menge
Write-Host "${artikelnummer};${preis};${menge} - Weggefallen"
} else {
$preisOld = $rowOld.Preis
$preisNew = $rowNew.Preis
if ($preisOld -ne $preisNew) {
$null = $unterschiede.Add("alter Preis ${preisOld}");
}
$mengeOld = $rowOld.Menge
$mengeNew = $rowNew.Menge
if ($rowOld.Menge -ne $rowNew.Menge) {
$null = $unterschiede.Add("alte Menge ${mengeOld}");
}
if ($unterschiede.Count -gt 0) {
$unterschiedeText = $($unterschiede -join ", ")
Write-Host "${artikelnummer};${preisNew};${mengeNew} - geändert: ${unterschiedeText}"
}
}
}
Die Motivation, alle Artikelnummern in eine Liste zu packen liegt daran, dass ich so hinzugefügte und entfernte Artikel erkennen kann. Geht bestimmt auch anders. Die Liste der Artikelnummern könnte man auch vorher noch sortieren, wenn man wollte.
Man könnte sicher einiges an Redundanz einsparen in dem Script.
Datei 1.csv:
Code:
1A;13,00€;101
2B;26,00€;500
3C;50,00€;200
4D;1;1
5E;10;20
Datei 2.csv:
Code:
2B;100,00€;500
1A;10,00€;100
3C;80,00€;200
4D;1;1
6F;30;40
Ausgabebeispiel:
Ergänzung ()
Neue bzw. gelöschte erkennst du mit der abgehangenen Lösung übrigens nicht.Piktogramm schrieb:Code:SELECT * FROM Stock, Current, NEW WHERE New.ID = Stock.ID AND New.ID = Current.ID AND Current.price != New.price
Zuletzt bearbeitet:
Piktogramm
Admiral
- Registriert
- Okt. 2008
- Beiträge
- 9.252
Das erkennen neu gelisteter Artikel samt Möglichkeiten zum Import, würde ich nicht in Routinen packen, die Preisdifferenzen der selbst geführten Artikel feststellen sollten.tollertyp schrieb:Neue bzw. gelöschte erkennst du mit der abgehangenen Lösung übrigens nicht.
Ich würde jedoch empfehlen, bei Routinen die Preisdifferenzen auswerten sollen eine Plausibilitätsprüfung einzuführen.
Und konkrete Lösungen brauchen konkretes Wissen über Istzustand hinter der Aufgabe des TE.
Also entscheidest du jetzt, welches Problem der TE hat?Piktogramm schrieb:Das erkennen neu gelisteter Artikel samt Möglichkeiten zum Import, würde ich nicht in Routinen packen, die Preisdifferenzen der selbst geführten Artikel feststellen sollten.
Ich zitiere:
Ich lese hier nichts von reinen Erkennung von Preisdifferenzen. Es geht um Unterschiede. Ich lese auch nichts von Datenbanken. Vermutlich weißt du einfach mehr als der TE über seine Problemstellung.MikE_GRH schrieb:Ziel ist es auf jeden Fall zwei Artikel/Preislisten im CSV-Format miteinander zu vergleichen und die Unterschiede gefiltert angezeigt zu bekommen.
duAffentier
Vice Admiral
- Registriert
- Jan. 2008
- Beiträge
- 7.093
Wenn du mal 2 CSV mir sendest, bnaue ich dir eine XLS, die das per VBA macht... Brauch die 2 Beispiel dateien.
Tzk
Commodore
- Registriert
- Nov. 2016
- Beiträge
- 4.280
Wenn der Aufbau der beiden CSV grundsätzlich gleich bleibt, dann kann man das schon mit Excel lösen. Das ist sicherlich nicht die beste Lösung, aber sollte funktionieren. Und hat den Vorteil, das Excel meist verfügbar ist. Shell Skripte sind z.B. bei uns in der Firma komplett geblockt.
Wie auf Seite 1 vorgeschlagen kann man beide CSV in ein Excel Sheet laden und dann die Daten mit SVERWEIS/XVERWEIS abgleichen. Danach kann man die Unterschied z.B. über eine einfache WENN Funktion rausfinden und ggf. auf die relevanten Zeilen filtern. Sicher nicht elegant, klappt aber.
Fies wird es mit dieser Variante, falls in beiden Listen Einträge vorhanden sind welche es in der anderen nicht gibt. Also quasi Liste 1 mit Extradaten "A" und Liste 2 mit Extradaten "B". Solange alles von A auch in B enthalten ist und B nur extra Daten enthält ist es kein Problem.
Wie auf Seite 1 vorgeschlagen kann man beide CSV in ein Excel Sheet laden und dann die Daten mit SVERWEIS/XVERWEIS abgleichen. Danach kann man die Unterschied z.B. über eine einfache WENN Funktion rausfinden und ggf. auf die relevanten Zeilen filtern. Sicher nicht elegant, klappt aber.
Fies wird es mit dieser Variante, falls in beiden Listen Einträge vorhanden sind welche es in der anderen nicht gibt. Also quasi Liste 1 mit Extradaten "A" und Liste 2 mit Extradaten "B". Solange alles von A auch in B enthalten ist und B nur extra Daten enthält ist es kein Problem.
ohmsl
Lt. Commander
- Registriert
- Apr. 2007
- Beiträge
- 1.760
Die Listen könnten auch schon beim Einlesen in Excel per PowerQuery verglichen werden.
https://exceltricks.blog/die-join-a...verbinden-von-abfragen-ganz-einfach-erklaert/
https://exceltricks.blog/die-join-a...verbinden-von-abfragen-ganz-einfach-erklaert/