Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Manglende shortcircuit

3 views
Skip to first unread message

Leif Neland

unread,
Jun 3, 2013, 7:46:10 AM6/3/13
to
Jeg lᅵber igennem et array fra getRows.

Jeg vil gᅵre noget, hvis det er den sidste rᅵkke eller den nᅵste rᅵkke
er anderledes i et felt.

F.ex, med disse data
rᅵd
rᅵd
-- 2 stk rᅵd
blᅵ
-- 1 stk blᅵ
(eof)


for n=lBound(arr) to uBound(arr)
...
if n=uBound(arr) or arr(1,n)<>arr(1,n+1) then
'sidste rᅵkke totalt eller forskellig fra nᅵste
...
end if
next

Men det fungerer ikke, Selvom n=uBound(arr) er sand, udregnes udtrykket
arr(1,n+1) til arr(1,uBound(arr)+1) og det er jo udenfor array, og
giver fejlmelding.

Kunne man lave boolean shortcut ville det fungere, udtrykket er sandt,
hvis det fᅵrste led er sandt, og sᅵ behᅵvede man ikke beregne det
sidste.

Kan det laves elegant?

Jeg kan kun tᅵnke pᅵ

if n=uBound(arr) then
'afslutnings-sᅵtninger
elseif arr(1,n)<>arr(1,n+1) then
'afslutnings-sᅵtninger
end if

Sᅵ skal afslutningssᅵtninger skrives to gange. Det kan laves som en
funktion, men sᅵ kommer det et stykke fra lᅵkken.

Ellers
flag=0
if n=uBound(arr) then
flag=1
elseif arr(1,n)<>arr(1,n+1) then
flag=1
end if

if flag then
'afslutnings-sᅵtninger
end if

Og det er jo rodet.

Eller den helt spagettiede, som man heldigvis ikke kan lave :-)

if n=uBound(arr) then goto do_it
if arr(1,n)<>arr(1,n+1) then goto do_id
goto dont_doit

doit:
'afslutnings-sᅵtninger
dont_doit:

Leif

--
Husk kᅵrelys bagpᅵ, hvis din bilfabrikant har taget den idiotiske
beslutning at undlade det.


runeof...@hotmail.com

unread,
Jun 5, 2013, 9:06:15 AM6/5/13
to
On 3 Jun., 13:46, Leif Neland <l...@neland.dk> wrote:

> Ellers
> flag=0
> if n=uBound(arr) then
>   flag=1
> elseif arr(1,n)<>arr(1,n+1) then
>   flag=1
> end if

Ja, brug boolean i stedet. Jeg ved ikke, hvordan ASP opfatter
forskellen imellem 1 og 0 (med mindre det er direkte bitvis
sammenligning), men true og false kan kun opfattes på én måde.

Du sætter flag = 1 med to forskellige conditions, det forstår jeg ikke
helt, så måske forstår jeg ikke spørgsmålet...

Flag = ( n=uBound(arr) Or arr(1,n)<>arr(1,n+1) )

Vil i hvert fald give samme resultat, bare med booleans, true hvor dit
flag er 1, false hvor dit flag er 0. Det vil altid være enten true
eller false.


MVH
Rune Jensen

runeof...@hotmail.com

unread,
Jun 5, 2013, 9:16:25 AM6/5/13
to
On 5 Jun., 15:06, runeofdenm...@hotmail.com wrote:

> Du sætter flag = 1 med to forskellige conditions, det forstår jeg ikke
> helt, så måske forstår jeg ikke spørgsmålet...
>
> Flag = ( n=uBound(arr) Or arr(1,n)<>arr(1,n+1) )

Ah, nu forstår jeg...

OK, så virker det nok heller ikke...

Jeg tænkte på at indsætte en AND i sidste led, men ved ikke, hvordan
den skal laves. Hvis første del af AND-leddet er falsk, så dropper den
vel resten af sætningen, må man gå ud fra.


MVH
Rune Jensen

Birger Sørensen

unread,
Jun 5, 2013, 10:15:21 AM6/5/13
to
Leif Neland har bragt dette til os:
flag = 0;
flag = (n < uBound(arr)) ? arr(1, n) <> arr(1, n+1) : 1;

?

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
Utils http://sdccms.dk/ordbog/ http://sdccms.dk/mailfriend/
http://bredelund.dk CMS som det var meningen et sᅵdant skulle vᅵre


Leif Neland

unread,
Jun 5, 2013, 2:45:36 PM6/5/13
to
Birger Sᅵrensen skrev:
>
> flag = 0;
> flag = (n < uBound(arr)) ? arr(1, n) <> arr(1, n+1) : 1;
>
> ?
>
> Birger

Det er ikke vbscript / classic asp.

Leif Neland

unread,
Jun 5, 2013, 2:45:38 PM6/5/13
to
runeof...@hotmail.com forklarede:
> On 5 Jun., 15:06, runeofdenm...@hotmail.com wrote:
>
>> Du sᅵtter flag = 1 med to forskellige conditions, det forstᅵr jeg ikke
>> helt, sᅵ mᅵske forstᅵr jeg ikke spᅵrgsmᅵlet...
>>
>> Flag = ( n=uBound(arr) Or arr(1,n)<>arr(1,n+1) )
>
> Ah, nu forstᅵr jeg...
>
> OK, sᅵ virker det nok heller ikke...
>
> Jeg tᅵnkte pᅵ at indsᅵtte en AND i sidste led, men ved ikke, hvordan
> den skal laves. Hvis fᅵrste del af AND-leddet er falsk, sᅵ dropper den
> vel resten af sᅵtningen, mᅵ man gᅵ ud fra.
>

Nej, det er det, der er problemet.

Alle led udfᅵres.

x=0
if x<>0 and 2/x > 1 then

.. fejler med division med 0

runeof...@hotmail.com

unread,
Jun 6, 2013, 11:05:54 AM6/6/13
to
On 5 Jun., 20:45, Leif Neland <l...@neland.dk> wrote:

> Alle led udføres.
>
> x=0
> if x<>0 and 2/x > 1 then
>
> .. fejler med division med 0

Jeg har også afprøvet, og jeg kan ikke finde en løsning på det. Jeg
får også division by zero uanset hvordan jeg hacker det.


MVH
Rune Jensen

Philip Nunnegaard

unread,
Jun 6, 2013, 12:20:19 PM6/6/13
to
Leif Neland skrev:

> Alle led udfᅵres.
>
> x=0
> if x<>0 and 2/x > 1 then
>
> .. fejler med division med 0

Lige denne havde jeg nok prᅵvet at ordne sᅵdan:

x=0
if x <> 0 then
if 2/x > 1 then

(...)
end if
end if

Alternativt havde jeg rykket om pᅵ sidste del af ligningen, sᅵ 2/x > 1
blev til 2 > x (altsᅵ ganget med x pᅵ begge sider af >-tegnet):

x=0
if x<>0 and x < 2 then


--
Philip
0 new messages