Sprung zum Seitenende Struktur Themen A...Z Titel << >>

CXI-Basis-Programmierreferenz / Version 2 / Datenspeicherung / CxiNode / Numerische Variablen /

GetAsNum - Variable als Zahl auslesen

[C++] long int CxiNode :: GetAsNum (CxiName pname, int index = -1, long int pdef = 0, CxiLong options = 0) const
[C++] int CxiNode :: GetAsInt (CxiName pname, int index = -1, int pdef = 0, CxiLong options = 0) const
[C++] int CxiNode :: GetAsLog (CxiName pname, int index = -1, int pdef = 0, CxiLong options = 0) const
[C] long int cxiGetAsNum ...P (CxiHandle self, CxiName pname, int index, long int pdef, CxiLong options)

[S1:BASIS] [Portabilitätswarnung] Liest eine Variable und gibt sie als Zahlenwert zurück

pname:
Name der Variablen oder Pfadangabe und Variablenname

index:
Index für Stringliste, sonst 0 oder -1

pdef:
Rückgabewert für den Fehlerfall (Vorgabe 0)

options:
Optionen (mit ODER verknüpft):
- cxiOptGetPartial: Teilkonvertierungen zulassen (siehe Tabelle)
- cxiOptGetImbeddedNumber: Enthaltene Zahl suchen (siehe Tabelle)
- cxiOptGetLogicalKeyword: Schlüsselwort erkennen (siehe Text)

return:
Gelesener Wert der Variablen, bei Fehler pdef

Operatorschreibweise:
Wert = Objekt [pname]

Diese Funktion liest den Wert einer beliebigen Variablen und konvertiert ihn in einen numerischen Wert. Folgende Typen werden unterstützt:

- cxiTypeNum: Der Wert der Variablen wird als 'signed long' zurückgegeben.

- cxiTypeChr: Der Wert der Variablen wird als 'unsigned char' interpretiert und als 'long' zurückgegeben.

- cxiTypeLog: Es wird 0 (false) oder 1 (true) zurückgegeben.

- cxiTypeStr: Ist die Option cxiOptGetLogicalKeyword gesetzt, wird zunächst geprüft, ob die Zeichenkette ein Schlüsselwort (TRUE, ON, YES, FALSE, OFF, NO) ist. Wird ein solches erkannt, liefert die Funktion den entsprechenden Wert (0 oder 1) zurück. Liegt kein Schlüsselwort vor oder ist die Option cxiOptGetLogicalKeyword nicht gesetzt, erfolgt die Standardauswertung:
Die Zeichenkette wird als Dezimal- oder Hex-Darstellung einer Zahl interpretiert (Format: [<Leerzeichen>] [+|-] [<Leerzeichen>] [0x] <Ziffernfolge> [<Leerzeichen>]); ist cxiOptGetPartial angegeben, so werden anschließende Zeichen toleriert, andernfalls darf die Zeichenkette nur die Zahl enthalten. Leerzeichen vor und nach der Ziffernfolge sind in jedem Fall erlaubt, die Ziffernfolge selbst darf nicht durch Leerzeichen unterbrochen sein und muss aus mindestens einer Ziffer bestehen. Sie wird als Hex-Zahl interpretiert, wenn '0x' oder '0X' vorangestellt ist, ansonsten als Dezimaldarstellung. Ist cxiOptGetImbeddedNumber angegeben, so dürfen der Zahl beliebige Zeichen vorausgehen, die Zeichenkette wird also nach einer Zahl durchsucht (zusätzlich sollte cxiOptGetPartial angegeben sein, wenn auch nach der Zahl nicht-numerische Zeichen ignoriert werden sollen).

- cxiTypeLst: Das durch den Parameter index (s.u.) bezeichnete Listenelement wird wie bei cxiTypeStr ausgewertet.

- cxiTypePtr: Der Zeiger wird als 'long' zurückgegeben.

- cxiTypeFun: Der Zeiger wird als 'long' zurückgegeben.

- cxiTypeFlt: Der ganzzahlige Anteil der Fließkommazahl wird zurückgegeben; überschreitet der Wert den long-Bereich, wird der maximale long-Wert (+/- 0x7FFFFFFF) geliefert; der negative Extremwert 0x80000000 wird nicht unterstützt; bei ungültigem Fließkommawert (NaN) wird pdef zurückgegeben.

- cxiTypeBin: 1-, 2- und 4-Byte-Werte werden als 'unsigned char', 'short' bzw. 'long' aufgefasst und zurückgegeben, andere Größen werden nicht unterstützt.

Die Elemente einer Variable vom Typ cxiTypeLst sind beginnend mit 0 durchnummeriert. Der Parameter index gibt entweder direkt die Nummer des gewünschten Elements an (Werte größer oder gleich 0), oder er ist eine relative Position vom Ende der Liste ausgehend (negativer Wert). Der Wert 0 kennzeichnet also das erste, -1 das letzte Element der Liste.

Alle Variablen, die nicht vom Typ cxiTypeLst sind, werden als einelementige Listen aufgefasst, bei diesen muss also der Index 0 oder -1 angegeben werden. Alle anderen Angaben für den Index werden als Fehler zurückgewiesen.

Die beiden Funktionen GetAsNum und GetAsInt sind bis auf den Typ des Rückgabewerts identisch.

GetAsLog entspricht GetAsNum mit der Option cxiOptGetLogicalKeyword, wobei der Rückgabewert in einen korrekten logischen Wert umgesetzt wird (d.h. bei allen Werten ungleich 0 wird 1 zurückgegeben).

Resource-Referenzen werden aufgelöst. Ist dies nicht möglich, wird ein Fehler zurückgegeben.

Portabilität:
Diese Funktion ist in allen unterstützten Systemen verfügbar. Die Hex-Darstellung von Zahlen wird ab Version 2.07 unterstützt. Die Auswertung von Fließkommazahlen erfolgt ab Version 2.07, auf INTEL-Prozessoren wird hierfür keine Fließkommaarithmetik verwendet, so dass dieses Feature auch ohne Coprozessor oder Emulator einsetzbar ist. Die Option cxiOptGetLogicalKeyword wird ab Version 2.08 erkannt.

Siehe auch:
GetAsStr
GetNum

Beispiel:

#include <stdio.h>
#include "cxib.h"

int main (void)
{
  char buffer [256];
  CxiTreeMem a = "VAR1=1;VAR2=7,'3Hugo',9;VAR3='-17';VAR4=19";
  long nv1 = a.GetAsNum ("VAR1");
  long nv2 = a.GetAsNum ("VAR2", 1, -4, cxiOptGetPartial);
  long nv3 = a.GetAsNum ("VAR3");
  long nv4 = a.GetAsNum ("VAR4", 1, 13);
  printf ("\nnv1=%ld, nv2=%ld, nv3=%ld, nv4=%ld.\n", nv1, nv2, nv3, nv4);
  a.AppendItem ("VAR3", "+5", cxiOptInsertForce);
  printf ("sv1=%s.\n", a.GetAsStr ("VAR1", buffer, sizeof buffer));
  printf ("sv2=%s.\n", a.GetAsStr ("VAR2", buffer, sizeof buffer));
  printf ("sv3=%s.\n", a.GetAsStr ("VAR3", buffer, sizeof buffer));
  printf ("sv4=%s.\n", a.GetAsStr ("VAR4", buffer, sizeof buffer));
  a.AppendItem ("VAR4", "+21", cxiOptInsertForce);
  a.DumpVars (0, 0, 1);
  return 0;
}

Ausgabe des Programms:

nv1=1, nv2=3, nv3=-17, nv4=13.
sv1=1.
sv2=9.
sv3=+5.
sv4=19.

***[1] 1995-10-28 19:52:25.870 ***

<*Window*> <Root> \
VAR1                    Num     1
VAR2                    Lst     [0] "7"
                                [1] "3Hugo"
                                [2] "9"
VAR3                    Lst     [0] "-17"
                                [1] "+5"
VAR4                    Lst     [0] "+21"

Das genaue Format der Dump-Ausgabe ist versionsabhängig und kann daher von diesem Beispiel abweichen.


[i] CXI-Basis-Programmierreferenz
Version 2.10 72 (1014-001), erstellt am 15. April 2000
Textseite 176 von 855, Thema 8366 (GetAsNum)
[c] Copyright (c) 1996-2000 by TeraConnect GmbH

Sprung zum Seitenanfang Struktur Themen A...Z Titel << >>