Avatar billede shjdsi Nybegynder
19. juli 2001 - 16:55 Der er 8 kommentarer og
1 løsning

Dato i perl

Hej!

Nu har jeg skørtet igennem spørsmål og svar vedr. dato i perl.
Jeg vil meget gerne kunne skrive dato i format dd/mm/yyyy i en fil. Det er i forbindelse med at skrive til en logfil. Men hvordan gør man???

Avatar billede mahler Nybegynder
19. juli 2001 - 17:14 #1
Følgende funktion skulle returnere en pæn tekst i det ønskede format:

sub klokken {
        my($timeString);
        my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
        if ($hour < 10) { $hour = \"0$hour\"; }
        if ($min < 10) { $min = \"0$min\"; }
        if ($sec < 10) { $sec = \"0$sec\"; }
        if (++$mon < 10) { $mon = \"0$mon\"; }
        if ($mday < 10) { $mday = \"0$mday\"; }
        $year = 1900 + $year;

        $timeString = \"${mday}/${mon}/${year} ${hour}:${min}\";

        return $timeString;

};
Avatar billede mahler Nybegynder
19. juli 2001 - 17:14 #2
${hour}:${min} skal naturligvis klippes ud hvis du ikke ønsker tid :-)
Avatar billede shjdsi Nybegynder
20. juli 2001 - 09:10 #3
jeg prøver sub funtionen klokken således:


$tid=&klokken;
print $tid;
sub klokken {
        my($timeString);
        my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
        if ($hour < 10) { $hour = \"0$hour\"; }
        if ($min < 10) { $min = \"0$min\"; }
        if ($sec < 10) { $sec = \"0$sec\"; }
        if (++$mon < 10) { $mon = \"0$mon\"; }
        if ($mday < 10) { $mday = \"0$mday\"; }
        $year = 1900 + $year;

        $timeString = \"${mday}/${mon}/${year} ${hour}:${min}\";

        return $timeString;

};
og får følgende fejl-
C:\\Mosaic\\bin>perl dato.pl
syntax error in file dato.pl at line 8, next 2 tokens \"my(\"
Execution of dato.pl aborted due to compilation errors.

Avatar billede mahler Nybegynder
20. juli 2001 - 09:35 #4
Jeg kunne ikke lige gennemskue hvilken der var din linje 8, men prøv følgende:

#!/usr/local/bin/perl -w
my $tid = klokken();
print \"$klokken\\n\";

sub klokken {
        my $timeString;
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
        if ($hour < 10) { $hour = \"0$hour\"; }
        if ($min < 10) { $min = \"0$min\"; }
        if ($sec < 10) { $sec = \"0$sec\"; }
        if (++$mon < 10) { $mon = \"0$mon\"; }
        if ($mday < 10) { $mday = \"0$mday\"; }
        $year = 1900 + $year;

        $timeString = \"$mday/$mon/$year\";
        return $timeString;
};
Avatar billede shjdsi Nybegynder
20. juli 2001 - 09:42 #5
Jeg for stadig fejl, det er ligesom at my keyword ikke vil fortolkes.

C:\\Mosaic\\bin>perl DATO.pl
syntax error in file DATO.pl at line 4, next 2 tokens \"my $tid \"
syntax error in file DATO.pl at line 8, next 2 tokens \"my $timeString\"
Execution of DATO.pl aborted due to compilation errors.

Jeg kører det fra NT sådan her.

c:\\perl dato.pl

mangler jeg et eller andet, jeg har en masse andre scripts der fungere fint, men dem har jeg jo heller ikke selv lavet :-)


Avatar billede mahler Nybegynder
20. juli 2001 - 10:01 #6
Jeg har lige prøvet følgende på min Win2000, og det kører:

#!/usr/bin/perl -w
use strict;

my $tid = klokken();
print \"$tid\\n\";

sub klokken {
        my $timeString;
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
        if ($hour < 10) { $hour = \"0$hour\"; }
        if ($min < 10) { $min = \"0$min\"; }
        if ($sec < 10) { $sec = \"0$sec\"; }
        if (++$mon < 10) { $mon = \"0$mon\"; }
        if ($mday < 10) { $mday = \"0$mday\"; }
        $year = 1900 + $year;

        $timeString = \"$mday/$mon/$year\";
        return $timeString;
};

--
Hvilken version af perl kører du?
Avatar billede shjdsi Nybegynder
20. juli 2001 - 10:29 #7
Jeg har fået det til at køre ved at bruge local istedet for my

sub klokken {
  local ($timeString);
  local ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
  ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;
        if ($hour < 10) { $hour = \"0$hour\"; }
        if ($min < 10) { $min = \"0$min\"; }
        if ($sec < 10) { $sec = \"0$sec\"; }
        if (++$mon < 10) { $mon = \"0$mon\"; }
        if ($mday < 10) { $mday = \"0$mday\"; }
        $year = 1900 + $year;

        $timeString = \"$mday/$mon/$year\";
        return $timeString;
}


$tid = &klokken();
print \"$tid\\n\";

;


Hvad er forskellen på local og my.
Avatar billede mahler Nybegynder
20. juli 2001 - 12:35 #8
øhhh...

I et forsøg på at lave en enkel forklaring, så er my normalt lokale variable, mens local oftest bruges til at lave en lokal kopi af en global variabel.

Man vil normalt altid skulle bruge my fremfor local,  og jeg har bestemt aldrig hørt om at my ikke skulle fungere.
Avatar billede shjdsi Nybegynder
20. juli 2001 - 13:05 #9
Det er også lidt underligt, men jeg har fundet ud af at jeg kører med en perl 4.1 eller noget i den retning, så jeg prøvede at installere en ny version og ekskvere dit script under den og det virkede også udemærket. Så det ved jeg faktisk ikke. Men tak for hjælpen

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

IT-JOB