Domino 9 und frühere Versionen > ND7: Entwicklung

Binäres und in Formelsprache

(1/2) > >>

MaxMuster:
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


--- Ende Code ---

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 ...






Glombi:
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

MaxMuster:
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

--- Ende Code ---

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

Stichworte sind Wilkommen.

Roger

Peter Klett:
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

MaxMuster:
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 )

--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln