Autor Thema: Ist ein Variant Leer ?  (Gelesen 6145 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Ist ein Variant Leer ?
« am: 16.10.04 - 17:45:31 »
Ich benötige eine *saubere* Function, die mir zurückgibt, ob ein Variant leer ist.

Mit "leer" meine ich auch, wenn z.B. in einem String zwar "   " steht, aber ein Trim$(Var) = "" ergibt.

Bisheriger Code:

Code
Public Function IsEmptyValue(vValue As Variant) As Integer

	IsEmptyValue = True 
	If Isempty(vValue) Or Isnull(vValue) Then Exit Function

	If Isscalar(vValue) Then
		If Not (Trim$(Cstr(vValue)) = "") Then IsEmptyValue = False
		Exit Function
	End If
	
	If Isarray (vValue) Or Islist (vValue) Then
		Forall elem In vValue
			If Not (Trim$(Cstr(elem)) = "") Then
				IsEmptyValue = False
				Exit Forall
			End If
		End Forall
	End If
	
End Function

Jetzt kann es aber doch sein, dass vValue ein Array ist, welches Arrays als Elemente enthält, oder?

Wie macht Ihr die Prüfung, ob eine Variable wirklich "leer" ist?
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Ist ein Variant Leer ?
« Antwort #1 am: 16.10.04 - 17:51:24 »
Hier wird es philosophisch: Was ist denn "leer" ? Das "  " "leer" ist, ist. m.E. schon wieder ein Sonderfall. Selbst ein wirklicher Leerstring muss unter bestimmten Umständen nicht "Variant ist leer" bedeuten. Meines Erachtens ist dies eine Frage, die so gar nicht einfach zu beantworten ist.

Zudem: Willst Du eine "allgemeingültige" Lösung, musst Du auch noch weitere "öfters vorkommende" Datatypes berücksichtigen. Dann geht es gleich weiter: Ist Der Wert 0 (nicht NULL !) "leer" oder nicht ?

Schwierig ...

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Ist ein Variant Leer ?
« Antwort #2 am: 16.10.04 - 18:03:24 »
Gut, das mit dem "      " könnte man über einen Parameter der Function mitgeben (bBeruecksichtigeSpaces True/False).

Was müsste man denn sonst noch alles berücksichtigen?

Es gibt ja u.a. diverse Rückgabewerte der DataType Function.

Dann kann ich abfragen:
 - IsScalar
 - IsArray
 - IsList
 - IsObject

Außerdem:
 - IsEmpty
 - IsNull
 - Is Nothing

Wie ist das eigentlich mit der Verschachtelung von Variant Arrays?
Ich glaube ich kann doch in ein Variant Array ein weiteres Variant Array setzen. Wie weit kann das weiter vollzogen werden - gibt es da eine Tiefengrenze?
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Ist ein Variant Leer ?
« Antwort #3 am: 16.10.04 - 18:59:37 »
Hier noch als Nachtrag meine Interpretationen, man korrigiere mich da bitte, falls ich da was  falsch verstanden habe:

IsEmpty Function:
Gibt TRUE zurück, wenn der Parameter ein Variant ist und noch kein Wert zugeordnet wurde.

IsNull Function
Prüft, ob ein Variant NULL ist (also Char(0)). Selber zuordnen kann man NULL nur einer Variant-Variable.
Ein leeres String (also Inhalt = "") ist nicht NULL, sondern eine Stringvariable mit der Länge 0.

Is Nothing
Is Nothing ergibt TRUE, wenn ein Objekt gedimmt wurde ohne "New" und noch kein Set erfolgt ist.

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re: Ist ein Variant Leer ?
« Antwort #4 am: 16.10.04 - 19:17:15 »
Zu
Is Nothing: Is Nothing ergibt TRUE, wenn ein Objekt gedimmt wurde und noch keinem gültigen Objekt zugewiesen (set) wurde.

Du kannst auch mit Set ein Nothing erzeugen, oftmals so
set doc = collection.GetFirstDocument
do while not doc is Nothing
...
set doc = collection.GetNextDocument(doc)
loop

Dann ist doc = Nothing, wenn die Do While Schleife verlassen wurde.

Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Ist ein Variant Leer ?
« Antwort #5 am: 16.10.04 - 21:12:11 »
IsNull Function
Prüft, ob ein Variant NULL ist (also Char(0)). Selber zuordnen kann man NULL nur einer Variant-Variable.
Ein leeres String (also Inhalt = "") ist nicht NULL, sondern eine Stringvariable mit der Länge 0.

Nö, Char (0) hat mit NULL absolut nichts zu tun (sondern geleichwertig mit Char (65) = "A" oder Char (13) = CR oder was auch immer. NULL ist NULL  ;D

Zu
Is Nothing: Is Nothing ergibt TRUE, wenn ein Objekt gedimmt wurde und noch keinem gültigen Objekt zugewiesen (set) wurde.

Du kannst auch mit Set ein Nothing erzeugen, oftmals so
set doc = collection.GetFirstDocument
do while not doc is Nothing
...
set doc = collection.GetNextDocument(doc)
loop

Dann ist doc = Nothing, wenn die Do While Schleife verlassen wurde.

Auch nicht ganz korrekt: doc wird Nothing, wenn collection.GetNextDocument (doc) zu keinem neuem instantiierbaren Dokument führt (weil keines in der NotesDocumentCollection mehr kommt). Selbstverständlich ist aber nach dem Verlasen der Schleife doc = Nothing. Logisch - war ja Bedingung zum Verlassen der Schleife.

Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Ist ein Variant Leer ?
« Antwort #6 am: 16.10.04 - 21:21:41 »
Möglicherweise etwas missverständlich Deine Erklärung con Char (0) [wenn auch richtig]. Char (0) liefert einen String von der Länge 1 zurück, welcher ein Byte mit dem Wert Zero ( 00H oder für C-Ler 0x00 ) zurückliefert, genauso wie Char (65) ein Byte mit dem Wert 41H [ 0x41] zurückliefert.

Da in C das Nullbyte als Stringende aufgefasst wird, wird ein solcher String beim Konvertieren zu C leider zu einem Nullstring mit der Länge 0. C hat die unangenehme Eigenschaft, dass ein String keine Byte vom Wert 00H enthalten kann.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Ist ein Variant Leer ?
« Antwort #7 am: 16.10.04 - 21:33:24 »
Äh - wer hat hier von C gesprochen ? Weit hergeholtes Gelaber (mit Verlaub) ;D

Bernhard

PS: Nur für Insider - wie Semeaphoros: Ich werde das jetzt aber zum Anlass nehmen, um endlich aufzuhören mit der "strengen" ungarischen Notation und für String-variablen kein "sz" als Präfix mehr verwenden. Jens' Beispiel ist der perfekte Beweis für die (absolute) Fraglichkeit von "sz" (auf die Jens ja schon früher hingewiesen hat. Mea culpa !

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Ist ein Variant Leer ?
« Antwort #8 am: 16.10.04 - 21:45:11 »
Ich vermute, dass das von TMC erwähnte

IsNull Function
Prüft, ob ein Variant NULL ist (also Char(0)).

vom C-Virus infiziert (oder iniziiert) ist, deshalb hab ich darauf hingewiesen, denn in C stimmt das so
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Ist ein Variant Leer ?
« Antwort #9 am: 16.10.04 - 21:51:02 »
Naja, aber selbst in C ist das dann keine Entsprechung für NULL ...

Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Ist ein Variant Leer ?
« Antwort #10 am: 16.10.04 - 22:39:30 »
Das ist richtig, wäre ein Leerstring.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Ist ein Variant Leer ?
« Antwort #11 am: 17.10.04 - 11:55:02 »
vom C-Virus infiziert (oder iniziiert) ist
Stimmt  ;)

Hier übrigens ein ganz interessanter Artikel:
How Does LEI Handle the Transfer of Null and Empty String Values?
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Ist ein Variant Leer ?
« Antwort #12 am: 17.10.04 - 12:29:10 »
... ist übrigens ein Virus, der bis jetzt noch von keinem einzigen Virenscanner erkannt wird. Habe keine Ahnung, ob er mit dem Vitamin-C verwandt ist ...... ;)
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz