AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ID erstellen/berechnen

Ein Thema von xineohp · begonnen am 6. Apr 2005 · letzter Beitrag vom 7. Apr 2005
Antwort Antwort
Seite 1 von 2  1 2      
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#1

ID erstellen/berechnen

  Alt 6. Apr 2005, 18:26
hi,

ich brauche eine größere Anzahl (1000-5000) eindeutige IDentifikations-Nummern. Zusätzlich soll aus jeder beliebigen Kombination dieser ID-Nummern wiederum eine eindeutige ID entstehen, die diese Kombination kennzeichnet.

Im Prinzip entspricht dieses Verhalten genau dem von (Windows-)Flags (z.B. die Dateiattribut-Flags) allerdings basieren diese Flags auf den 2er Potenzen und ist somit eigentlich nur für kleinere Mengen (~50) geeignet, da 2^1000 doch ziemlich groß ist

Ich hoffe das jemand von euch eine passende Idee hat, wie man dieses Problem elegant lösen kann.
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#2

Re: ID erstellen/berechnen

  Alt 6. Apr 2005, 22:57
Zitat:
ich brauche eine größere Anzahl (1000-5000) eindeutige IDentifikations-Nummern.
Zusätzlich soll aus jeder beliebigen Kombination dieser ID-Nummern wiederum eine eindeutige ID entstehen, die diese Kombination kennzeichnet.
wenn eine ID1 eine ID2 zwei beschreiben kann, ist dann nicht die ID2 überflüssig?

Zitat:
Im Prinzip entspricht dieses Verhalten genau dem von (Windows-)Flags (z.B. die Dateiattribut-Flags)
wusste noch gar nicht dass mein Windows über 1000 FileAttribs hergeben kann

Zitat:
allerdings basieren diese Flags auf den 2er Potenzen und ist somit eigentlich nur für kleinere Mengen (~50) geeignet, da 2^1000 doch ziemlich groß ist
kannst du auch ein ein größeres Zahlensystem wie z.B. hexadezimal verwenden?

kannst du näher schildern um was es überhaupt geht
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: ID erstellen/berechnen

  Alt 6. Apr 2005, 23:16
5000 Bits sind noch kein Problem, denke ich. Nimm einfach einen Bitvektor z.B. Classes.TBits (D7)
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#4

Re: ID erstellen/berechnen

  Alt 7. Apr 2005, 12:15
Hallo xineohp,

wenn es was mit Datenbanken zu tun hat, kannst Du ftAutoInc nutzen, wenn nicht mußt Du Dir den letzt verwendeten Wert merken. Int64 sollte für die meisten Datenmengen ausreichen zur eindeutigen Identifizierung. Im schlimmsten Fall kannst Du aus ID1 und ID2 eine Zeichenkette mit konstanter Länge bilden und diese hintereinandersetzen. Sollte auch etwas eineindeutiges ergeben.

Programmiervorschläge kann ich erst machen, wenn ich weiß worum es geht.

mfg
eddy
  Mit Zitat antworten Zitat
opfer.der.genauigkeit

Registriert seit: 14. Feb 2005
66 Beiträge
 
#5

Re: ID erstellen/berechnen

  Alt 7. Apr 2005, 12:33
Hi,

du kannst auch deine ID per CoCreateGuid erzeugen.
Dann hast du GUIDs, was die Wahrscheinlichkeit einer Redundanz ziemlich unrealistisch macht.
Stellen Sie sich bitte Zirkusmusik vor.
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#6

Re: ID erstellen/berechnen

  Alt 7. Apr 2005, 14:01
hm,

hätte nicht gedacht, dass ich so schwer zu verstehen bin ... aber egal, ich werde noch mal verdeutlichen was ich meine:

angenommen ich habe fünf verschiedene Dateien, denen ich jeweils eine eindeutige ID zuordne:

Code:
Datei 1: ID1 = 1  = 2^0
Datei 2: ID2 = 2  = 2^1
Datei 3: ID3 = 4  = 2^2
Datei 4: ID4 = 8  = 2^3
Datei 5: ID5 = 16 = 2^4
Dann kann ich aus jeder beliebigen Kombination (das scheinen einige überlesen zu haben ) wiederum eine eindeutige ID errechnen:

Datei 1 & Datei 2 & Datei 3: ID = ID1 + ID2 + ID3 = 1 + 2 + 4 = 7 (Diese ID kann ausschließlich durch diese eine Kombination erzielt werden!)

Datei 1 & Datei 3 & Datei 5: ID = ID1 + ID3 + ID5 = 1 + 4 + 16 = 21
Datei 3 & Datei 5 & Datei 1: ID = ID3 + ID5 + ID1 = 4 + 16 + 1 = 21 (Die Reihenfolge spielt dabei keine Rolle)

Und dies ist genau das Prinzip, nachdem die diversen Windowsflags funktionieren.
Allerdings funktioniert dieses Prinzip nur bei kleineren ID-Anzahlen, da die Potenzen von Zwei sehr schnell sehr groß werden.



Die einzige Antwort, die auch nur im entferntesten passt ist die von marabu, allerdings kann ich mir nicht vorstellen, wie ich das umsetzen könnte. Ich wäre für ein Beispiel dankbar.
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: ID erstellen/berechnen

  Alt 7. Apr 2005, 14:07
Wenn du für 5000 verschiedene Attribute alle möglichen Kombinationen eindeutig in einer ID speichern willst, bist du mit Integer o.ä. Typen komplett verloren, denn dafür muss du 2^5000 verschiedene IDs erzeugen können, und das ist ne Menge. Es bleibt dir also nix anderes übrig, als eine Klasse zu schreiben, wo du nicht deine ID direkt speicherst, sondern eben jedes einzelne Bit getrennt. Als Bit-Typ kannst du z.B. Boolean nehmen. Die einzelnen Bits kannst du in einem dynamischen array speichern.

Dann musst du wohl auch noch AND und OR in der Klasse einbauen. Das sollte aber nicht das Problem sein, da dir ja jedes einzelne Bit in einer getrennten Variable vorliegt.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: ID erstellen/berechnen

  Alt 7. Apr 2005, 14:20
Zitat von xineohp:
Die einzige Antwort, die auch nur im entferntesten passt ist die von marabu, allerdings kann ich mir nicht vorstellen, wie ich das umsetzen könnte. Ich wäre für ein Beispiel dankbar.
Delphi-Quellcode:
uses
  Classes;
var
  bits: TBits;
begin
  bits.size := 5000; // wieviele bits willst du verwalten?
  bits[n] := true; // bit einschalten
  bits[n] := false; // bit ausschalten
  if bits[n] then {} else {};
end;
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#9

Re: ID erstellen/berechnen

  Alt 7. Apr 2005, 14:23
hm,

@Jelly
genau das(eine extra Klasse) wollte ich eigentlich vermeiden, da ich dann meine IDs erzeugen und freigeben müsste und zusätzlich das Kopieren auch nicht so trivial ist, da ich mich in verschiedenen Threads bewege.

Ich glaube ich entscheide mich für eine billig Lösung:
Die primären IDs sind einfach Zahlen von 1 bis 5000 und die Kombinationen identifiziere ich, indem ich die enthltenen ID der Größe nach sortiert in einen String schreibe.

@marabu
Vielen Dank. Allerdings ist tBits auch eine Klasse, womit die obengenannten Probleme auftreten.
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: ID erstellen/berechnen

  Alt 7. Apr 2005, 14:26
Zitat von xineohp:
Die primären IDs sind einfach Zahlen von 1 bis 5000 und die Kombinationen identifiziere ich, indem ich die enthltenen ID der Größe nach sortiert in einen String schreibe.
Naja, wenn du eine Kombination von 5000 IDs in ein String schreibst, belegst du somit 25MB Speicher...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:01 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