AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Eindeutiger Zahlenwert für einen String

Ein Thema von musicman56 · begonnen am 12. Aug 2011 · letzter Beitrag vom 12. Aug 2011
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#11

AW: Eindeutiger Zahlenwert für einen String

  Alt 12. Aug 2011, 17:02
Zu Not Hashes mit zwei verschiedenen Algorithmen machen, oder Hash + GUID. Wenn bei verschiedenen Daten beide Hashes auch noch gleich sind, na dann Prost
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#12

AW: Eindeutiger Zahlenwert für einen String

  Alt 12. Aug 2011, 17:10
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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#13

AW: Eindeutiger Zahlenwert für einen String

  Alt 12. Aug 2011, 17:25
Hallo zusammen,

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

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

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!

Geändert von musicman56 (12. Aug 2011 um 17:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Eindeutiger Zahlenwert für einen String

  Alt 12. Aug 2011, 17:26
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#15

AW: Eindeutiger Zahlenwert für einen String

  Alt 12. Aug 2011, 17:52
@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.

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.

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
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#16

AW: Eindeutiger Zahlenwert für einen String

  Alt 12. Aug 2011, 18:40
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.112 Beiträge
 
Delphi 12 Athens
 
#17

AW: Eindeutiger Zahlenwert für einen String

  Alt 12. Aug 2011, 19:42
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Aug 2011 um 19:44 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
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