Avatar billede ulricho Novice
26. januar 2004 - 01:06 Der er 9 kommentarer og
1 løsning

#if.empty i XAL

Hvad er der galt i det følgende:

STR 20 &Tmp

#IF.EMPTY(&Tmp)
  SET Box(1,"1",0)
#ENDIF

SET &Tmp = "Ikke_tom"

#IF.EMPTY(&Tmp)
  SET Box(1,"2",0)
#ENDIF

Resultatet er, at ingen af boksene kommer frem! Warum?

Hvad andre funktioner findes der i øvrigt med #... ?
#DEFINE.Parm(''), ???
Avatar billede mariaf Juniormester
26. januar 2004 - 07:44 #1
Du erklærer en variabel, der pr definition er tom, så de nførste box burde komme frem. Prøv med SET BOX(1,"1",1)
Avatar billede ulricho Novice
26. januar 2004 - 07:53 #2
Nej, det undrer også mig,men det gør den ikke. Hvad kan det så være?
Avatar billede ishoey Nybegynder
26. januar 2004 - 08:20 #3
Så vidt jeg kan se, når du ikke at se den box der er i focus, enten skal du lave en PAUSE til sidst i koden eller lave en box med svar muligheder.
Avatar billede ulricho Novice
26. januar 2004 - 10:08 #4
Det virker stadig ikke :-(
Avatar billede colaand Nybegynder
26. januar 2004 - 10:23 #5
Hvad er grunden til du ikke bare skriver:
IF &Tmp <> "" THEN
  SET Box(1,"1",0)
ENDIF
Avatar billede ulricho Novice
26. januar 2004 - 11:06 #6
Jeg kan godt forstå, at du stiller spørgsmålet ud fra det foreliggende materiale. Dog er jeg inde i en makro, hvor jeg ikke ved, om en variabel eksisterer. Derfor undersøges der på det!
Avatar billede colaand Nybegynder
26. januar 2004 - 11:19 #7
Så skal du overføre variablen ved kald af makroen.
Derefter kan du bruge:
#IF.EMPTY(%1)
Avatar billede jasman Nybegynder
27. januar 2004 - 11:39 #8
Hejsa,

problemet er at konstruktionen:

#IF.EMPTY
#ENDIF

er noget som kompilerens preprocessor reagerer på.
D.v.s. at på kompileringstidspunktet, fanger kompileren at hvis
direktivet og vil så inkludere koden hvis det der står i parantesen "ikke er tom".

Normalt er det noget man anvender, når man skriver makroer, til at få inkluderet kode, hvis en bestemt makro argument er blevet givet ved brugen af lokalmakroen.

Et eksempel:

#LOCALMACRO.WarningOrSelectionBox
#IF.EMPTY(%2)
SET BOX(2,%1,0)
#ENDIF
#IFNOT.EMPTY(&2)
IF SET BOX(3,%1+'\n'+"Vil du fortsætte ?",0) == 0 THEN
    RETURN
ENDIF
#ENDIF
#ENDMACRO

Hvis denne localmakro er inkluderet i koden, og du skriver:
#WarningOrSelectionBox("Der er noget galt");
Får du en warningbox med meddelelsen "Der er noget galt".

Men hvis du i koden skriver:
#WarningOrSelectionBox("Der er noget galt",TRUE);
Får du en warningbox med meddelelsen "Der er noget galt. Vil du fortsætte", men med to knapper som giver brugeren mulighed for enten at fortsætte eller afbryde (RETURN)

D.v.s. altså sige, at hvis du anvender makroen med ET argument, får du inkluderet en stump kode i det (i XAL-miljøet) eksekverbare program (nemlig den kode der står efter
#IF.EMPTY(%2).
Og hvis du anvender makroen med TO argumenter, får du inkluderet en stump kode i det (i XAL-miljøet) eksekverbare program (nemlig den kode der står efter
#IFNOT.EMPTY(%2).

HVIS du vil checke runtime om en given variabel har en bestemt værdi, vil jeg foreslå at du følger colaands råd og skriver:

IF &Tmp <> "" THEN
  SET Box(1,"1",0)
ENDIF

M.h.t. andre compiler-direktiver, så findes de vist nok (så vidt jeg husker) i det dersens lille supplement der følger med programmerings manualerne til XAL/C5. Jeg kan bare ikke lige huske hvad den hedder på stående fod (er på arbejde - og har ikke lige manualerne her).

/Jasman
Avatar billede jasman Nybegynder
02. april 2004 - 09:56 #9
Er det ikke lukketid her ?
Avatar billede ulricho Novice
02. april 2004 - 10:43 #10
Ups. Du har ret.

Løsningen var den rigtige, selvom det ikke var entydigt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester