Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8620[/thread]

Lister der Dateinamen inkl. Datum und Uhrzeit: Windows / Dateiauflistung



<< >> 10 Einträge, 1 Seite
wiederlader
 2007-01-03 14:50
#72867 #72867
User since
2007-01-03
36 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,
ich möchte mir aus einem Windows Verzeichnis alle *.sql Dateien mit Datum und Uhrzeitangabe anzeigen lassen. Wenn ich die Folgenden beiden Programmcode aufrufe erhalte ich aber nur die Dateinamen ohne Datum und Uhrzeit. Was muss ich angeben um zusätzlich das Datum und Uhzeit mit angezeigt zu bekommen?

##########################################
chdir ("$sst_path") or die "chdir nach $sst_path nicht möglich : $!";
@Dateien=glob ("*.*");
my @Log_Dateien = glob("*.sql")
foreach (@Log_Dateien) {
print "$_\n";
}
##########################################
Ausgegeben wird folgende Datei ohne Datumsangabe: sqlnet.log
Ich hätte aber gerne folgend Ausgabe (oder ähnlich: sqlnet.log 03.01.2007 13:23

Ich habe alternativ auch schon folgendes ausprobiert:
##########################################
opendir SST_PATH, $sst_path or die "Kann $sst_path nicht öffnen: $!";
while ($dateinamen = readdir SST_PATH) {
next unless $dateinamen =~/\.sql$/;
print "$dateinamen\n";
}
closedir SST_PATH;
##########################################
Allerdings bekomme ich hier auch nur den Dateinamen ausgegeben. In dem OREILLY Buch "Einfürhung in Perl" und im Internet kann ich keinen Lösungsansatz finden. Ich befasse mich allerdings auch erst seit 3 Tagen mit Perl. Kann mir evtl. jemand unter die Arme greifen ?
DANKE
Gruß, Markus
betterworld
 2007-01-03 14:57
#72868 #72868
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Du kannst das Datum etc. mit der Funktion stat() (siehe perldoc) abfragen (fuer jeden Dateinamen einzeln).
MisterL
 2007-01-03 15:16
#72869 #72869
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Gemeint ist das Package CPAN:File::Stat
Zur Benutzung siehe Screenshot 1 und Screenshot 2
Der reguläre Kommandozeilenbefehl unter Windows wäre z.B. "dir *.sql /O:D"

mfg MisterL
“Perl is the only language that looks the same before and after RSA encryption.”
renee
 2007-01-03 15:32
#72870 #72870
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@MisterL: Es gibt auch eine Built-In stat-Funktion (siehe perldoc -f stat). Das Modul CPAN:File::stat bietet diese Informationen in Objektorientierter Art und Weise (und verwendet die internen Funktionen)...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
wiederlader
 2007-01-03 16:08
#72871 #72871
User since
2007-01-03
36 Artikel
BenutzerIn
[default_avatar]
Danke für den Hinweis.
Ich habe mir anhand der Funktion stat() mal das folgende Script zusammengebaut (geschustert). Werde ich morgen mal weiter verfeinern.
##########################################
my $file = "sqlnet.log";
my $logpath = "D:/temp/";
chdir ("$logpath") or die "chdir nach $logpath nicht möglich : $!";
my @dateistat = stat($file);
my $zeitstempel = $dateistat[9]; # [9]=Zeitstempel des letzten schreibenden Zugriffs
my $datum = localtime $zeitstempel;
my($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime $zeitstempel;
$Monat+=1; #Monat +1(++), weil er er sonst von 0 bis 11 gezählt wird
$Jahr+=1900; #Jahr +1900 weil time nur die vergangene Zeit ab 1900 ausgibt
$zeitstempel=sprintf("%4d.%02d.%02d %02d:%02d:%02d",$Jahr,$Monat,$Monatstag,$Stunden,$Minuten,$Sekunden);
print "$file $zeitstempel\n";
##########################################

Ausgegeben wird jetzt: sqlnet.log 2006.12.05 06:01:01

Allerdings ist der Programmcode ziemlich wüst. Ich sehe mir auch mal das Package File::Stat an.
Vielleicht hat ja noch jemand einen Verbesserungsvorschlag für mein Script.
DANKE
renee
 2007-01-03 16:23
#72872 #72872
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
my $file    = "sqlnet.log";
my $logpath = "D:/temp/";
my $time = (stat($logpath . $file))[9];
my @info = localtime $zeitstempel;
$info[4]++; #Monat +1(++), weil er er sonst von 0 bis 11 gezählt wird
$info[5]+=1900; #Jahr +1900 weil time nur die vergangene Zeit ab 1900 ausgibt
$stamp =sprintf("%4d.%02d.%02d %02d:%02d:%02d",@info[5,4,3,2,1,0]);
print "$file $zeitstempel\n";
\n\n

<!--EDIT|renee|1167834278-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nepos
 2007-01-03 16:24
#72873 #72873
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Um das mit dem Zeitstempel einfacher zu machen, kannst du auch die Funktion strftime aus dem Modul CPAN:POSIX nutzen:
Code (perl): (dl )
1
2
use POSIX qw/strftime/;
my $zeitstempel = strftime("%d.%m.%Y %H:%M:%S", localtime($dateistat[9]));
wiederlader
 2007-01-05 14:50
#72874 #72874
User since
2007-01-03
36 Artikel
BenutzerIn
[default_avatar]
Hallo Renee,
danke für die Verfeinerung des Scripts. Da es vielleicht noch andere gebrauchen können, lege ich es hier noch einmal so ab wie es bei mir jetzt funktioniert.
Quote
my $file = "sqlnet.log";
my $logpath = "D:/temp/";
my $timestamp = (stat($logpath . $file))[9];
my @info = localtime $timestamp;
$info[4]++; #Monat +1(++), weil er er sonst von 0 bis 11 gezählt wird
$info[5]+=1900; #Jahr +1900 weil time nur die vergangene Zeit ab 1900 ausgibt
$timestamp=sprintf("%4d.%02d.%02d %02d:%02d:%02d",@info[5,4,3,2,1,0]);
print "$file $timestamp\n";
wiederlader
 2007-01-05 14:55
#72875 #72875
User since
2007-01-03
36 Artikel
BenutzerIn
[default_avatar]
[quote=nepos,03.01.2007, 15:24]Um das mit dem Zeitstempel einfacher zu machen, kannst du auch die Funktion strftime aus dem Modul CPAN:POSIX nutzen:
Code (perl): (dl )
1
2
use POSIX qw/strftime/;
my $zeitstempel = strftime("%d.%m.%Y %H:%M:%S", localtime($dateistat[9]));
[/quote]
Hallo nepos,
wie müsste ich die POSIX Funktion in mein Script einbauen? Irgendwie krieg ich es nicht gebacken. Ich bin zwar mit der jetzigen Lösung voll und ganz zufrieden, bin aber für weitere Verbesserungen immer aufgeschlossen.
nepos
 2007-01-05 15:56
#72876 #72876
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Naja, POSIX ist ein Modul. Die Use-Anweisung sollte dieses Modul in dein Skript einbinden. Der Part mit qw// importiert die Funktion strftime in den Namensraum deines Skriptes.
Eigentlich sollte es reichen, wenn du die beiden Zeilen wie oben uebernehmen wuerdest. Das POSIX-Modul ist normal immer vorhanden.
<< >> 10 Einträge, 1 Seite



View all threads created 2007-01-03 14:50.