Zahl vs String (Datum)
petz
- perl
Hallo
Ich habe ein Skript, das täglich einmal läuft. Dies erledigt einige nicht relevante administrative Aufgaben und funktioniert reibungslos.
Zum Monatswechsel soll es zudem eine Datei umbenennen und einen <a>-Tag in eine Textdatei schreiben (href=ebenUmbenannteDatei). Diese Textdatei wird später aus einem anderen Skript in eine HTML-Seite eingebunden. Grundsätzlich funktioniert dies auch. Problem ist, dass das Skript den neuen Namen der Datei falsch erzeugt.
Es soll an jedem ersten des Monats die datei DATEI.html in DATEIvormonatjahr.html umbenennen. Bsp: am ersten Dezember: DATEI.html -> DATEI1104.html. Dazu erzeuge ich erstmal ein Date und frage ab, ob es der erste eines Monats ist. Falls dies der Fall ist, wird die Datei umbenannt und ins Textfile geschrieben. Ich hab nun diverse Dinge ausprobiert, leider hilft es nix. Wenn ich das Systemdatum zu Testzwecken auf 1.12. stelle, wird die Datei entweder in DATEI0-1204.html oder DATEI0004.html umbenannt. Dies je nach dem, ob ich mit dem Einstelligen, oder dem Zweistelligen Monat rechne. Ich seh vor lauter Bäumen den Wald nicht. Wäre schön, wenn Sich jemand kurz die Zeit nehmen könnte und den untenstehenden Code kurz anschauen könnte. Danke für Eure Unterstützung.
#!C:\Program Files\Perl\bin\perl.exe
use strict;
my $Jahr1;
my $Monat1;
my $Monatstag1;
my $Vormonat;
my $History;
#Aktueles Datum ermitteln
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
$Monat+=1;
$Jahrestag+=1;
$Jahr-=100;
$Monatstag1 = $Monatstag; #monatstag einstellig
$Jahr1 = $Jahr; #jahr einstellig
$Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
$Jahr = $Jahr < 10 ? $Jahr = "0".$Jahr : $Jahr;
$Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
$Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden;
$Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
$Sekunden = $Sekunden < 10 ? $Sekunden = "0".$Sekunden : $Sekunden;
#Prüfen, ob bereits eine datei besteht
if (-e "G:/datei.html") {
#Am ersten des Monats, bestehende Auswertung umbenennen und Eintrag in history-File vornehmen
if ($Monatstag1 == 1) {
if ($Monat1 == 1) {
$Vormonat = 12;
$Jahr -= 1;
}
else{
$Vormonat -= $Monat1;
$Vormonat = $Vormonat < 10 ? $Vormonat = "0".$Vormonat : $Vormonat;
}
rename("G:/datei.html","G:/datei".$Vormonat.$Jahr.".html");
open(HISTORY, ">>D:/file.history");
print(HISTORY "<br><a href="datei".$Vormonat.$Jahr.".html">Statistik ".$Vormonat."/".$Jahr."</a>");
close(HISTORY)
}
}
Beste Grüsse
Meister Petz
Sup!
Vielleicht solltest Du den Code kommentieren, also bei jeder Zeile sagen, was Du denkst, was sie tut.
So hat IMHO niemand Lust, sich durch den Code zu arbeiten, nur "weil Du nicht programmieren kannst".
Gruesse,
Bio
Moin Meister Petz.
Erstmal: Bio hat recht, so ganz ohne Kommentare...
Ein paar Tipps:
Wo versorgst Du die Variable $Monat1, die Du in einer IF-Abfrage benutzt?
Und was macht diese Zeile:
$Vormonat -= $Monat1;
Soll die das hier $Vormonat = $Monat1 - 1; machen?
Bau einfach mal ein paar prints ein, mit denen Du die Variablen ausgibts...
Gruß Frank
Hallo Frank
Erstmal: Bio hat recht, so ganz ohne Kommentare...
naja, so ganz ohne wars ja nicht, aber ich merks mir.
Wo versorgst Du die Variable $Monat1, die Du in einer IF-Abfrage benutzt?
nirgends, seit ich dies tue, funktionierts.
Und was macht diese Zeile:
$Vormonat -= $Monat1;
Soll die das hier $Vormonat = $Monat1 - 1; machen?
ja. ich habs jetzt in der langen form geschreiben.
danke für die Hinweise, Gruss
petz
Hallo
Hab den Code nun bissrl mehr kommentiert.
#!C:\Program Files\Perl\bin\perl.exe
use strict;
#Beginn Deklarationen
my $Jahr1;
my $Monat1;
my $Monatstag1;
my $Vormonat;
my $History;
#Ende Deklarationen
#Aktueles Datum ermitteln
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
$Monat+=1; #Damit der Monat nicht bei 0 beginnt
$Jahrestag+=1; #Damit der 1.1. nicht der 0te Tag im Jahr ist
$Jahr-=100; #Weil die Perl Zeitrechnung ab 1900 läuft
$Monatstag1 = $Monatstag; #monatstag einstellig
$Jahr1 = $Jahr; #jahr einstellig
$Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat; #$Monat, falls einstellig '0' voranstellen
$Jahr = $Jahr < 10 ? $Jahr = "0".$Jahr : $Jahr; #dito
$Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag; #dito
$Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden; #dito
$Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten; #dito
$Sekunden = $Sekunden < 10 ? $Sekunden = "0".$Sekunden : $Sekunden; #dito
#Prüfen, ob bereits eine datei besteht
if (-e "G:/datei.html") {
#Am ersten des Monats, bestehende Auswertung umbenennen und Eintrag in history-File vornehmen
if ($Monatstag1 == 1) # ist erster Tag des Monats?
{
if ($Monat1 == 1) # ist Januar?
{
$Vormonat = 12; # wenn januar, dann Vormonat Dezember, also 12
$Jahr -= 1; #wenn januar, vormonat dezember des vorjahres -> jarh -1
}
else{
$Vormonat -= $Monat1; #nicht januar, also vormonat monat -1
$Vormonat = $Vormonat < 10 ? $Vormonat = "0".$Vormonat : $Vormonat; #falls vormonat einstellig, null voranstellen
}
rename("G:/datei.html","G:/datei".$Vormonat.$Jahr.".html"); #dateiumbenennen von datei.html nach datei$vormunat$jahr.html, $vormonat stimmt nicht
open(HISTORY, ">>D:/file.history"); #handler öffenen zum anfügen an textfile
print(HISTORY "<br><a href="datei".$Vormonat.$Jahr.".html">Statistik ".$Vormonat."/".$Jahr."</a>"); # Link (HTML) schreiben) , hier stimmt $vormonat nicht
close(HISTORY) #handle schliessen
}
}
Bio, wäre nett, wenn Du, oder jeder andere interessierte sich den Code nun ansehen könntest.
danke und Grüsse
meister petz