Avatar billede nvr Nybegynder
03. august 2000 - 09:40 Der er 6 kommentarer og
1 løsning

Syntaks-problemer igen-igen

*suk* Jeg må jo nok sande, at det her er mere, end jeg kan greje.

Scriptet ser således ud:

#!/usr/bin/perl

print \"Content-type: text/html\\n\\n\";

&pic;

exit;

sub pic
{
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);

$dennedag = (\'Søndag\',\'Mandag\',\'Tirsdag\',\'Onsdag\',\'Torsdag\',\'Fredag\',\'Lørdag\')[$wday];

############
# HVERDAGE #
############

###### - ONSDAG - ######

if ($dennedag eq \'Onsdag\' && ($hour > 5 && $hour < 10)) {
    print \"Morgenradio fra 6 - 9\";
    }

if ($dennedag eq \'Onsdag\' && ($hour > 8 && $hour < 13 && $min < 03)) {
    print \"Formiddagsradio fra 10 - 11.45\";
    }


###### - TORSDAG - ######

if ($dennedag eq \'Torsdag\' && ($hour > 6 && $hour < 9)) {
    print \"Morgenradio fra 6 - 9\";
    }

if ($dennedag eq \'Torsdag\' && ($hour > 8 && $hour < 13 && $min < 03)) {
    print \"Formiddagsradio fra 9 - 11.45\";
    }
  else
  {
    print \"Billedarkivet er lukket.\";
  }

}

Jeg ville jo mene, at den burde her 9.35 skrive \"Formiddagsradio fra 9 - 11.45\", da:

if ($dennedag eq \'Torsdag\' && ($hour > 8 && $hour < 12 && $min < 45)) {
    print \"Formiddagsradio fra 9 - 11.45\";

...Det er torsdag. Klokken er mere end 8 og mindre end 12 (d.v.s. 11) og mindre end 45...

Jeg jeg FULDKOMMEN misforstået, hvordan jeg skal bygge sådan en tidsbegrænsning op eller...?
Avatar billede erikjacobsen Ekspert
03. august 2000 - 12:55 #1
Du kan gøre det ca. 3 trilliarder gange nemmere ved at gøre således:
Hvis du skal markere tidspunktet mellem 0837 og 1151 (for nu at gøre
det svært), så skriver du

  if ( 837<=($hour*100+$min) && ($hour*100+$min)<=1151 ) { ... }

Evt. beregner du en gang for alle $hour*100+$min og smider i en variabel.

(Hehe, hvorfor sender du ikke bare din spørgsmål direkte til mig... *gg* )
Avatar billede erikjacobsen Ekspert
03. august 2000 - 13:05 #2
Ups, en advarsel, Skriv aldrig foranstillede 0.er.  0837 giver en syntaksfejl
og 0444 er ikke lig med 444 men ca. 292. Det er fordi et foranstillet 0 gør
tallet oktalt overfor Perl. Så aldrig begynder med et 0 - med mindre du
skriver 0...
Avatar billede nvr Nybegynder
04. august 2000 - 09:56 #3
Ja, jeg burde sende spørgsmålene direkte til dig.

Og som sædvanligt er dit svar perfekt. Vidste jeg ikke bedre, skulle jeg tro, at du underviste datalogistuderende i Århus! :)
Avatar billede erikjacobsen Ekspert
04. august 2000 - 10:12 #4
Du har ret i 2 ud af 3: Jeg underviser datamatikerstuderende i Århus ;-)
Avatar billede nvr Nybegynder
04. august 2000 - 10:15 #5
;)

Pinligt! Jeg kunne ikke engang huske, hvad det var for et studie, min kammerat er i gang med! :)
Avatar billede nvr Nybegynder
04. august 2000 - 10:29 #6
BTW der er nu noget mærkeligt ved den kode.

I dette herrens øjeblik viser den p.g.a. følgende kode:

if ($dennedag eq \'Fredag\' && 1003<=($hour*100+$min) && ($hour*100+$min)<=1059)
{
    print \"Formiddagsradio 10\";
    }


\"Formiddagsradio 10\"

Men putter jeg endnu en if ind bag efter den forrige:

if ($dennedag eq \'Fredag\' && 1103<=($hour*100+$min) && ($hour*100+$min)<=1144)
{
    print \"Formiddagsradio 11\";
    }

Bliver den vild i varmen og fortæller FORUDEN den korrekte tekst samtidig at \"Billedarkivet er lukket\". Mærkeligt...
Avatar billede erikjacobsen Ekspert
04. august 2000 - 11:31 #7
Det er på grund af din \"else\"... Den \"else\" er kun på den allersidste \"if\", og når der er falsk, kommer
det der står i \"else\"-n.

Du kan f.eks. gøre det således:

  if (...) {
    ...
  } elsif (...) {
    ...
  } elsif (...) {
    ...
  } else {
    print \"Det kan jeg ikke finde ud af\";
  }
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
Kurser inden for grundlæggende programmering

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