Wie kann ich die Dateien in einem Verzeichnis in sortierter Reihenfolge lesen?

8

Wenn ich ein Verzeichnis in Perl mit opendir , readdir und closedir lese, scheint die Funktion readdir die Dateien nicht in einer bestimmten Reihenfolge zu lesen (was ich sagen kann).

Ich lese ein Verzeichnis, das Unterverzeichnisse hat, die nach Epoche Zeitstempel benannt sind:

%Vor%

Ich möchte in diesen Verzeichnissen in numerischer Reihenfolge lesen, die die ältesten Verzeichnisse zuerst setzen würde.

Wenn ich readdir verwende, ist die erste, die es liest, 1228324260, was die mittlere ist. Ich weiß, ich könnte den Inhalt des Verzeichnisses in ein Array setzen und das Array sortieren, aber gibt es eine Option, die ich an readdir übergeben kann, um in sortierter Reihenfolge zu lesen? Oder vielleicht eine elegantere Art, dies zu erreichen, als alles in Array zu schieben und das Array zu sortieren? Es gibt wahrscheinlich auch Module, die das tun, aber es ist schwierig, Module in unserer Umgebung zu installieren. Wenn es kein eingebautes Modul ist, würde ich lieber keine Module verwenden ...

Danke!

BEARBEITEN Wie gewünscht, poste ich den Code, den ich verwende:

%Vor%     
BrianH 12.01.2009, 17:22
quelle

3 Antworten

13

readdir kann im Array-Kontext aufgerufen werden, also tun Sie das einfach:

%Vor%     
Andrew Barnett 12.01.2009, 17:42
quelle
5

Sie können es mit etwas Globemagie versuchen, Glob scheint in einer sortierten Weise zu funktionieren, also dies:

%Vor%

oder

%Vor%

sollte funktionieren. Sei nur vorsichtig mit glob, denn dies:

%Vor%

macht etwas Halbmagisches und druckt den Dir-Inhalt zweimal auf jeder Zeile. zB:

%Vor%     
Kent Fredric 12.01.2009 18:00
quelle
5

Werfen Sie einfach einen sort vor jeden Listenoperator, den Sie neu ordnen wollen. Sie müssen die Ergebnisse auch nicht in einem Array speichern. Sie können ein foreach verwenden:

%Vor%     
brian d foy 12.01.2009 19:10
quelle