Hallo zusammen
ich habe 2 Listen, eine alte und eine neue
Alt mit
A
B
Neue mit
A
C
Liefert eine Liste der gelöschte Einträgen : B
Liefert eine Liste der neue Einträgen : C
Kennt jemand eine Lösung?
Danke
Datenlist vergleiche (neu, gelöscht)
Datenlist vergleiche (neu, gelöscht)
Win-10, PB 5.31 (Windows - x86)
Re: Datenlist vergleiche (neu, gelöscht)
Sind die Einträge deiner Listen unique? Oder kann "A" auch mehrmals vorkommen?
Wenn die Listen unique sind, kannst du Maps verwenden.
Ansonsten guck mal ob die Levenshtein-Distanz was für dich wäre.
Mit ihr können Änderungen erkannt werden, und was nötig ist, um zwei Zeichenketten (Listen) ineinander zu überführen (Hinzufügen, Löschen, Verschieben).
Wenn die Listen unique sind, kannst du Maps verwenden.
Ansonsten guck mal ob die Levenshtein-Distanz was für dich wäre.
Mit ihr können Änderungen erkannt werden, und was nötig ist, um zwei Zeichenketten (Listen) ineinander zu überführen (Hinzufügen, Löschen, Verschieben).
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Datenlist vergleiche (neu, gelöscht)
Ja, die beiden Listen sind unique
Was die Levenshtein-Distanz angeht, schaue ich es mir an
Wie meinst Du mit Maps!
Was die Levenshtein-Distanz angeht, schaue ich es mir an
Wie meinst Du mit Maps!
Win-10, PB 5.31 (Windows - x86)
- HeX0R
- Beiträge: 2961
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 - Kontaktdaten:
Re: Datenlist vergleiche (neu, gelöscht)
Ich hab da mal was vorbereitet
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
Re: Datenlist vergleiche (neu, gelöscht)
Ich will kein "String A ungefähr wie String B" bekommen sonder wissen was dazu gekommen ist und was gelöscht wurde.
Ich habe es so gelöst:
Ich habe es so gelöst:
Code: Alles auswählen
NewMap old.s()
old("A")=""
old("B")=""
NewMap new.s()
new("A")=""
new("C")=""
NewMap union.s()
CopyMap(old(), union())
ForEach new()
AddMapElement(union(), MapKey(new()))
Next
key.s
ForEach union()
key = MapKey(union())
If FindMapElement(old(), Key) And Not FindMapElement(new(), Key)
Debug "DEL "+key
ElseIf FindMapElement(new(), Key) And Not FindMapElement(old(), Key)
Debug "NEW "+key
EndIf
Next
Win-10, PB 5.31 (Windows - x86)
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Datenlist vergleiche (neu, gelöscht)
Wenn beide Listen sortierbar oder sogar schon vorsortiert sind, dann ist es sehr einfach. Du iterierst über beide sortierte Listen gleichzeitig und prüfst jedes Mal zwischen ElementA aus Liste A und ElementB aus Liste B folgendes:
- Ist ElementA = ElementB, dann gehe in jeder Liste einen Schritt weiter
- Ist ElementA < ElementB, dann fehlt ElementA in Liste B, wurde also entfernt. Gehe nun einen Schritt weiter in Liste A
- Ist ElementA > ElementB, dann fehlt ElementB in Liste A, wurde also hinzugefügt. Gehe nun einen Schritt weiter in Liste B
Re: Datenlist vergleiche (neu, gelöscht)
Du kannst auch eine fertige Bibliothek für Mengen-Operationen benutzen: https://www.purebasic.fr/english/viewto ... 12&t=45787
Für kleinere Probleme ist das wohl Overkill. Dafür wird dein Programm schön kurz.
Für kleinere Probleme ist das wohl Overkill. Dafür wird dein Programm schön kurz.
Code: Alles auswählen
XIncludeFile "<Pfad>/set.pbi"
Define.Set::Set Alt, Neu, Geloescht, Hinzugefuegt
Set::FromString("{A,B}", Alt)
Set::FromString("{A,C}", Neu)
Set::Difference(Alt, Neu, Geloescht)
Set::Difference(Neu, Alt, Hinzugefuegt)
Debug Set::ToString(Geloescht)
Debug Set::ToString(Hinzugefuegt)
Re: Datenlist vergleiche (neu, gelöscht)
Dank Nino
Ist wirklich einfach - ich werde es probieren
Ist wirklich einfach - ich werde es probieren
Win-10, PB 5.31 (Windows - x86)