Autor Thema: Binäres und in Formelsprache  (Gelesen 4345 mal)

Offline MaxMuster

  • Frischling
  • *
  • Beiträge: 19
Binäres und in Formelsprache
« am: 02.11.10 - 17:55:00 »
Hallo!

Lässt sich ein binäres und in Formelsprache (z.B. in Hide when Formeln ) abbilden?
Code
Wert := 10;
Flag := 4;

Wert & Flag = Flag


Binär würde daraus:

Wert := 01010
Flag  := 00100
&          ---------
             00000 == 00100 (False)

Ein Beispiel für True wäre:
Wert := 01110      (14)
Flag  := 00100      (4)
&          ---------
             00100 == 00100 (True)


Über die Sinnhaftigkeit über Flags habe ich schon erfolglos gestritten ...






« Letzte Änderung: 04.11.10 - 12:27:39 von MaxMuster »
z.Zt: Domino 7.0.2 / Notes 7.0.2 & 8.5.1

Glombi

  • Gast
Re: Binäres und in Formelsprache
« Antwort #1 am: 02.11.10 - 19:12:01 »
In Formelsprache gibts keine bitweisen Operationen (jedenfalls kenne ich keine).

In Script sähe es so aus:
   Dim x As Integer, y As Integer
   x% = &b01010
   y% = &b00100
   If Bin$(x% And y%) = Bin$(y%) Then
      Msgbox "true"
   Else
      Msgbox "false"
   End If

Andreas

Offline MaxMuster

  • Frischling
  • *
  • Beiträge: 19
Re: Binäres und in Formelsprache
« Antwort #2 am: 03.11.10 - 10:12:48 »
Hallo Andreas,

auf die Idee in Script die Flags Binär anzugeben bin ich gar nicht gekommen. Macht (zusammen mit Anmerkingen) den Code lesbarer

Bisher hatte ich in etwa so kodiert:
Code
Dim intWert As Integer
Dim intFlag As Integer
	
intWert = 12
intFlag = 2
Print ((intWert And intFlag) = intFlag)                  ' False
	
intWert = 22
intFlag = 2
Print ((intWert And intFlag) = intFlag)                  ' True

Die Flags sind im Designentwurf drinnen - über die Umsetzung in hideWhen Formeln habe ich noch keine Idee.

Stichworte sind Wilkommen.

Roger
z.Zt: Domino 7.0.2 / Notes 7.0.2 & 8.5.1

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Binäres und in Formelsprache
« Antwort #3 am: 03.11.10 - 10:25:50 »
In Hide-When bekommst Du das nur, wenn Du das Ergebnis in Felder des Dokuments schreibst und das Feld in der Hide-When-Formel abfragst

Offline MaxMuster

  • Frischling
  • *
  • Beiträge: 19
Re: Binäres und in Formelsprache
« Antwort #4 am: 03.11.10 - 15:53:10 »
So, habe mir mal eine Kopiervorlage für hideWhen-Formeln gebaut. Eventuell kann es jemand gebrauchen bzw. findet grobe Schnitzer  ;)

Die Einschränkungen sind: Nur 32 Bit; Es wird nur ein Bit abgefragt.

Roger

Code
_Wert := Wert ;     	REM {Die Flags als Dezimalwert   (hier aus dem Dokument gelesen)};
_WhichBit := Flag;	REM {Welches Bit für die Anzeige gesetzt sein muss (hier aus dem Dokument gelesen)};

REM { --==[ DO NOT EDIT BELOW THIS LINE]==-- };

_BitValues := 1 : 2 : 4 : 8 : 16 : 32 : 64 : 128 : 256 : 512 : 1024 : 2048 : 4096
     : 8192 : 16384 : 32768: 65536 : 131072 : 262144 : 524288 : 1048576
     : 2097152 : 4194304 : 8388608 : 16777216 : 33554432 : 67108864
     : 134217728 : 268435456 : 536870912 : 1073741824 : 2147483648 ;

_BitIndex := @Elements(_BitValues);
@While( _BitIndex > 0;

 _BitValue := @Subset(@Subset(_BitValues; _BitIndex); -1);

 _Flag := @If( (_Wert - _BitValue) >= 0; @True; @False);
 _Bits := _Bits + ";" + @Text(_Flag ) ;

 @If(_Flag; _Wert := _Wert - _BitValue; 0);

 _BitIndex := _BitIndex -1
);
_Bits := @Right(_Bits;@Length(_Bits)-1); REM {Führendes ';' abschneiden};

REM {Falls noch woanders damit Weitergerechnet werden sollte};
_BitList := @Explode( _Bits ; ";");       REM {Liste mit den Bitwerten (hoch nach niedrig)};
_BitString :=  @ReplaceSubstring( _Bits; ";";"") ;  REM {String mit den Bitwerten (hoch nach niedrig)};


_Result := @If( @TextToNumber(@Subset(@Subset(_BitList; - _WhichBit);1)) = 1; @True ; @False);
!( _Result )
z.Zt: Domino 7.0.2 / Notes 7.0.2 & 8.5.1

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Binäres und in Formelsprache
« Antwort #5 am: 03.11.10 - 18:33:49 »
Ich hab da auch noch was um eine Zahl in einen Bitstring umzuwandeln.
Code
z := Eingabe;
t := "";
@for(i := 2147483648; i >= 1; i := i / 2; t:= t + @If(!@IsNumber(z);"-";z >= i;@Do(z := z-i; "1");"0"));
t
In die Variable "z" kommt die umzuwandelnde Zahl, in "t" steht nach Durchlauf der @For-Schleife ein 32-Bit String.
Am Besten als berechnetes Feld in die Maske rein machen, Vergleiche in den Hide-Formeln kann man dann bequem mit
Code
@Like(t;"_____________________________1__")
machen, ob ein bestimmtes Bit gesetzt (bzw mit 0 nicht gesetzt) ist.


Gruß
Roland

/edit: Erklärung
Code
z:= Zahl
i := 2^31

Solange i (i durchläuft alle 2er-Potenzen)
  prüfe ob z eine Zahl ist, wenn nein gib "-" aus (Fehlerbehandlung)
  prüfe ob z >= i ist (dann ist das entsprechende Bit gesetzt)
    und ziehe z ab und gib "1" aus
    ansonsten gib "0" aus
  i := i / 2 (nächste 2er Potenz)
next

Obige Schleife wird nun 32 mal ausgeführt und gibt für jedes Bit eine 1 oder 0  (bzw. "-" für ungültig) aus.
« Letzte Änderung: 04.11.10 - 10:59:13 von pram »
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline MaxMuster

  • Frischling
  • *
  • Beiträge: 19
Re: Binäres und in Formelsprache
« Antwort #6 am: 04.11.10 - 09:55:20 »
Hallo Roland,

es braucht ein wenig die Formel zu verstehen - zumindest für mich.

Aber das ist ist ziemlich genau das was ich gesucht habe.

Vielen Dank, Roger

PS: Kann man den Thread als beantwortet markieren?
z.Zt: Domino 7.0.2 / Notes 7.0.2 & 8.5.1

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: Binäres und in Formelsprache
« Antwort #7 am: 04.11.10 - 11:18:28 »
Symbol des 1. Beitrages auf 'Daumen hoch' ändern.

Gruß
Dirk
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz