AGB  ·  Datenschutz  ·  Impressum  







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

set of.. speichern/laden?

Ein Thema von Angel4585 · begonnen am 24. Aug 2006 · letzter Beitrag vom 24. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

set of.. speichern/laden?

  Alt 24. Aug 2006, 12:03
Hallo,

ich habe folgendes:
Delphi-Quellcode:
type
  TMyTyp = (mt1,mt2,mt3,mt4,mt5);
  TMyTypes = set of TMyTyp;

.
.

procedure SaveToFile(ATyp : TMyTypes);
begin
//Was muss hier rein?
end;

procedure Test;
var mytyp : TMyTypes;
begin
mytyp := [mt1,mt2,mt4];
SaveToFile(mytyp);
end;
Wie muss die Prozedur SaveToFile aussehen, damit ich später ein möglichst einfaches LoadFromFile machen kann?

ich hatte mal irgendwo das Phänomen, dass solche sets als Integer abgespeichert wurden. Dabei hatte der erste Wert den Wert "1", der zweite den Wert "2", der dritte "4", der vierte "8", diese dann alle zusammenaddiert wurden und somit eindeutig in einer Zahl den Inhalt des gespeicherten Sets dargestellt haben.
//Edit: In diesem Fall wäre das die Zahl "11" die diese zusammensetzung eindeutig darstellt und die nicht anders zusammenzusetzen ist.

Gibt es dafür einen Befehl der das macht?

Hoffentlich hab ich mich verständlich ausgedürckt

MfG
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: set of.. speichern/laden?

  Alt 24. Aug 2006, 12:08
Kleiner Tipp:
Hier im Forum suchenSet speichern
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: set of.. speichern/laden?

  Alt 24. Aug 2006, 12:11
Ein Set ist ein Bitvektor.

Das sieht dann bei 5 Werten etwa so aus:

00000000 00000000 00000000 000abcde

Wenn a im set ist, dann ist in dem Bitvektor a=1, ansonsten a=0. Bei b-e ist das dann analog.

Wenn du also ein Set speichern/laden willst, musst du es beim Speichern nur nach Integer casten und dann abspeichern, beim Laden nen Integer laden und in deinen Settyp casten.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: set of.. speichern/laden?

  Alt 24. Aug 2006, 12:20
wie genau sprech ich jetzt die Bits an?


also wenn ich a,b,c,d,e hab stehen die 00000000 00000000 00000000 000edcba drin.

also wenn die Bits ein string wären wäre es
bits[Length(bits)-Ord(a)] wo ich setzen müsste für a.
aber wie bekomm ich die als Bits? oder soll ich die besser quadrieren?

Also
zahl:=zahl+Round(power(Ord(a)+1,2)); wenn es das schon gäbe, als einfach Funktion oder so die das komplette Set gleich speichert wäre das viel einfacher...

ok, das speichern hab ich:

Delphi-Quellcode:
function GetZahl(ASet : TMyTypes):Integer;
var i : integer;
begin
if TMyTyp(0) in ASet then
  Result:=1
else result:=0;
for i:= 1 to 4 do//Kann man die Anzahl der Werte dynamisch ermitteln?
  if TMyTyp(i) in ASet then
    Result:=Result+Round(power(i,2));
end;
aber wie lade ich das jetzt wenn ich z.B. "11" bekomme?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: set of.. speichern/laden?

  Alt 24. Aug 2006, 12:43
Wenn du ein Set in einen Integer umwandeln willst, dann caste es einfach nach integer und vice versa.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

Re: set of.. speichern/laden?

  Alt 24. Aug 2006, 12:49
Integer(myset); ergibt aber ne fehlerhafte Typenumwandlung

die Schleife hab ich jetz folgendermaßen überarbeitet:

Delphi-Quellcode:
  function GetZahl(ASet : TMyTypes):Integer;
  var mytest : TMyTyp;
  begin
  Result:=0;
  for mytest in ASet do
    if Ord(mytest) = 0 then
      Result:=Result+1
    else Result:=Result+Round(Power(Ord(mytest),2));
  end;
aber das mit dem Laden... das will irgendwie nicht...
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: set of.. speichern/laden?

  Alt 24. Aug 2006, 13:08
Zitat von 3_of_8:
Wenn du also ein Set speichern/laden willst, musst du es beim Speichern nur nach Integer casten [...]
Und wenn das Set mal größer als 32 Bit ist, schaust du in die Röhre. Toll.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#8

Re: set of.. speichern/laden?

  Alt 24. Aug 2006, 13:12
Also beim laden bin ich jetzt soweit, aber häng an der entscheidenden Stelle:

Delphi-Quellcode:
  function GetSet(AZahl : integer):TMyTypes;
  var
    mytest : TMyTyp;
    cnt,i,lzahl : integer;

  begin
  cnt:=0;
  repeat
  inc(cnt);
  until Round(Power(cnt,2))> AZahl;

  lzahl:=AZahl;
  Result:=[];
  for i:= Pred(cnt) downto 1 do
    if Round(Power(i,2)) <= lZahl then
      begin
      lzahl:=lzahl-Round(Power(i,2));
      Result:= (Result or TMyTyp(i));
      end;
  if lzahl = 1 then
    Result:= Result or TMyTyp(0);
  end;
ich habe eben das Result und möchte einen Teil davon setzen. wie mache ich das?
OR und + gehen beide nicht. Muss was anderes her?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Reinhold
(Gast)

n/a Beiträge
 
#9

Re: set of.. speichern/laden?

  Alt 24. Aug 2006, 13:19
Wie wärs mit: ein Set Datentyp speichern
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: set of.. speichern/laden?

  Alt 24. Aug 2006, 13:38
Ein Typecasting auf ein Set zum Speichern halte ich für ziemlich gefährlich.

1) Wie Khabarakh sagte, kann ein Set auch mal größer 32Bit sein.

2) Ein Set kann(muss) auch, mal erweitert werden, wenn's notwendig ist. Was bekommt man denn da heraus, wenn man eine alte Setstruktur läd.

Ich würde mir da eher eine Get bzw. Set-Procedure schreiben

z.B.

Delphi-Quellcode:
Function MySetToString(aSet:TMySet):String;
Function StringToMySet(aString:String):TMySet;
Da hast du dann die richtige Kontrolle.
  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 23:04 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