Zwei CSV Dateien vergleichen und Ergebnisse filtern (evtl. Excel?)

Nein, so schlau sind die schon zu erkennen, dass dort eine Zeile hinzugekommen ist und danach wieder alles gleich ist.
1704896632269.png
 
  • Gefällt mir
Reaktionen: Perdakles
stimmt! Habe es gerade getestet...
Faszinierend!

Dennoch bräuchte ich eine Filterung nach relavanten Artikeln
 
Wobei diese textbasierten Tools manchmal halt durcheinander kommen - das wäre ein gutes Einsatzgebiet für KI meiner Meinung nach.

Ich würde wohl in Richtung VBA gehen, wenn ich mit Excel-Formeln nicht ans Ziel komme.
 
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.

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.
 
tollertyp schrieb:
Wobei diese textbasierten Tools manchmal halt durcheinander kommen - das wäre ein gutes Einsatzgebiet für KI meiner Meinung nach.
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 -.- /rant
 
  • Gefällt mir
Reaktionen: RegShoe
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.

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.
Dann nenne die Lösungen.

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 ()

Piktogramm schrieb:
Zudem in den aller meisten Fällen die Quellen irgendwelcher CSV Dateien die Exporte von Datenbankabfragen sind.
Ja, aber vielleicht nicht zum selben Zeitpunkt.
 
@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ö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.
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:
1704905671833.png

Ergänzung ()

Piktogramm schrieb:
Code:
SELECT * FROM Stock, Current, NEW
    WHERE New.ID = Stock.ID
    AND
    New.ID = Current.ID
    AND
    Current.price != New.price
Neue bzw. gelöschte erkennst du mit der abgehangenen Lösung übrigens nicht.
 
Zuletzt bearbeitet:
tollertyp schrieb:
Neue bzw. gelöschte erkennst du mit der abgehangenen Lösung übrigens nicht.
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 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.
 
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.
Also entscheidest du jetzt, welches Problem der TE hat?
Ich zitiere:
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.
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.
 
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.
 
Zurück
Oben