Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Eindeutiger Zahlenwert für einen String (https://www.delphipraxis.net/162208-eindeutiger-zahlenwert-fuer-einen-string.html)

s.h.a.r.k 12. Aug 2011 17:02

AW: Eindeutiger Zahlenwert für einen String
 
Zu Not Hashes mit zwei verschiedenen Algorithmen machen, oder Hash + GUID. Wenn bei verschiedenen Daten beide Hashes auch noch gleich sind, na dann Prost :stupid:

rollstuhlfahrer 12. Aug 2011 17:10

AW: Eindeutiger Zahlenwert für einen String
 
Reicht denn nicht ein AutoInc-Feld? - Das ist auf jeden Fall für die nächsten 2 Millionen Einträge eindeutig. Je nachdem wie viele Bits die Datenbank dem INT-Feld spendiert, sind das auch wesentlich mehr Einträge.
Und ganz nebenbei braucht so ein Feld keine Rechenleistung, um einen Hash zu berechnen, der dann vielleicht doch eine Dublette hat, weil eine Überweisung 2x vorkam. Je nachdem, was die Überweisung denn war, ist es durchaus sogar normal, dass über das Jahr verschiedene Posten 12x vorkommen, sei es Miete, Lohn, Gehalt, ... .

Bernhard

musicman56 12. Aug 2011 17:25

AW: Eindeutiger Zahlenwert für einen String
 
Hallo zusammen,

bin fündig geworden. Der Link von "stahli" hat mich auf die richtige Spur gebracht. :-D

MD5-Hash ist die Lösung. Mit 16 Bytes ist die Datenmenge noch erträglich und auch noch effektiv zu indizieren :-D

Wen's interessiert, einfach nach "delphi hash md5.pas" googeln.

@Bernhard
Es geht ja nicht darum, dass ich "intern" in der Datenbank ein eindeutiges Kriterium habe. Die Daten stammen von externen Banking-Programmen, in den unterschiedlichsten Formaten (csv,txt,dbf...). Ein User kann ein und die selbe Datei ja mehrfach "versuchen" einzulesen und ich kann das nicht verhindern. Da hilft auch nix, wenn ich die Datei nach dem Import lösche. Hinzu kommt: Manche Banking-Programme haben nicht einmal die Möglichkeit den Export-Umfang zeitlich zu begrenzen. Da bekomm ich also manchmal generell das gesamte Jahr geliefert, und dann wird's lustig....

Also dann, nochmals vielen Dank an alle!

p80286 12. Aug 2011 17:26

AW: Eindeutiger Zahlenwert für einen String
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1116507)
Je nachdem, was die Überweisung denn war, ist es durchaus sogar normal, dass über das Jahr verschiedene Posten 12x vorkommen, sei es Miete, Lohn, Gehalt, ... .

Einspruch Euer Ehren,
mehrfach soll wohl bedeuten, das der Überweisungsbeleg für juli-Gehalt von Herrn willibald Maier in Ulm von der Landwirtschaftsbank Unterbayern 2x vorhanden ist.
Nich daß er 12 mal im Jahr Gehalt bezogen hat.

Gruß
K-H

rollstuhlfahrer 12. Aug 2011 17:52

AW: Eindeutiger Zahlenwert für einen String
 
Zitat:

Zitat von musicman56 (Beitrag 1116509)
@Bernhard
Es geht ja nicht darum, dass ich "intern" in der Datenbank ein eindeutiges Kriterium habe. Die Daten stammen von externen Banking-Programmen, in den unterschiedlichsten Formaten (csv,txt,dbf...). Ein User kann ein und die selbe Datei ja mehrfach "versuchen" einzulesen und ich kann das nicht verhindern. Da hilft auch nix, wenn ich die Datei nach dem Import lösche. Hinzu kommt: Manche Banking-Programme haben nicht einmal die Möglichkeit den Export-Umfang zeitlich zu begrenzen. Da bekomm ich also manchmal generell das gesamte Jahr geliefert, und dann wird's lustig....

Sorry, habe ich anders verstanden.

Zitat:

Zitat von musicman56 (Beitrag 1116509)
Wen's interessiert, einfach nach "delphi hash md5.pas" googeln.

Tja, leider ist das nicht ganz so einfach: Es gibt für Delphi bestimmt 10 oder mehr verschiedene Implementierungen für MD5-Hashes, aber das Ergebnis sollte überall das gleiche sein.

Zitat:

Zitat von p80286 (Beitrag 1116510)
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1116507)
Je nachdem, was die Überweisung denn war, ist es durchaus sogar normal, dass über das Jahr verschiedene Posten 12x vorkommen, sei es Miete, Lohn, Gehalt, ... .

Einspruch Euer Ehren,
mehrfach soll wohl bedeuten, das der Überweisungsbeleg für juli-Gehalt von Herrn willibald Maier in Ulm von der Landwirtschaftsbank Unterbayern 2x vorhanden ist.
Nich daß er 12 mal im Jahr Gehalt bezogen hat.

Ich habe es nachgeschaut und tatsächlich steht beim Gehalt der Monat mit dabei. Hätte ja sein können, dass man 12x im Jahr an unterschiedlichen Tagen vom selben Absender mit dem selben Verwendungszweck und der selben Geldmenge eine Transaktion erhält. Das hätte (ohne Datum) dann wirklich Spaß gemacht.

Bernhard

musicman56 12. Aug 2011 18:40

AW: Eindeutiger Zahlenwert für einen String
 
Hallo,

na ja, die Gehälter sind bei den wiederkehrenden Buchungen weniger das Problem. Bei Abhebungen am Geldautomaten beispielsweise ist ja BLZ und Konto überhaupt nicht angegeben, und der Verwendungszweck ist auch der selbe, wenn's der gleiche Automat ist/war. Und dann wird's lustig: Jetzt hat der Kunde 100,- Euro vom Automaten gezogen, und eine Stunde später nochmals, weil er mit seiner Frau Schuhe kaufen war :shock:

himitsu 12. Aug 2011 19:42

AW: Eindeutiger Zahlenwert für einen String
 
Ein "einfacher" kleiner Hasch über die gewünschten Felder. (4 oder 8 Byte reicht und ist schnell zu prüfen).

Vor dem einfügen eines neuen Datensatzes den Hash berechnen und nachsehn, ob es andere Datensätze mit diesem Hash gibt.
Gibt es einen, dann die Felder direkt vergleichen. Bei direktem Fund dann doch nichts einfügen.

Eventuell auch erstmal einfügen und dann später die Dubletten rausfiltern, wenn die Dubletten nicht sofort stören.



Wie gesagt, 100% eindeutig kann ein Hash nicht sein.

Bei einem MD5-Hash, bzw. einer GUID (128 Bit) gibt es bei einer Datengröße von nur 17 Byte theoretisch, zu jedem Hash durchschnitlich bis zu 256 Datensätze.
Bei 18 Byte sind es schon 65-tausend, bei 20 Byte über 4 Milliarden usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz