1 2 3 4 5
# alphanumerisch my @files = sort readdir DIR; # nach änderungsdatum, neuestes zuletzt my @files = sort {-M "$directory/$b" <=> -M "$directory/$a" } readdir DIR;
1 2
# nach änderungsdatum neuestes zuerst my @files = sort {-M "$directory/$b" <=> -M "$directory/$a" } readdir DIR;
1 2 3 4 5 6 7
my @files = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [-M "$directory/$_", $_] } readdir DIR;
1 2 3 4 5 6 7 8 9 10 11
opendir(DIR,$directory); my @files = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [-M "$directory/$_", $_] } readdir(DIR); closedir(DIR);
1 2 3
opendir(DIR,$directory); my @files = map { $_->[1]} sort { $b->[0] <=> $a->[0] } map { [-M "$directory/$_", $_]} readdir(DIR); closedir(DIR);
1
2
3
4
5
6
7
8
$ ls -art test
.. foo bar 42 23 999 abcd .
$ perl -wE'
my $dir = "test";
opendir my $dh, "test" or die $!;
my @files = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { [-M "$dir/$_", $_] } readdir $dh;
say "@files";'
.. foo bar 42 23 999 . abcd
2012-02-04T09:32:48 FIFO
Vielleicht sagst Du mal, welche Sortierung bei Dir erscheint?
2012-02-04T15:30:47 IceRageDas kann ich dir leider nicht sagen. Tut mir leid. Ich verstehe die Sortierung nicht, wie sie bei mir erscheint.
2012-02-04T15:30:47 IceRageWenn es also eine Möglichkeit gäbe, dem Explorer eine andere Sortierung vorzuweisen, dann wäre mir auch schon geholfen.
2012-02-04T15:30:47 IceRageDas Resultat müsste aber aussehen wie beispielsweise { $a cmp $b } in Perl.
2012-02-04T01:17:20 IceRageich lese ein Verzeichnis mit
aus.
Wie müsste jetzt das Sortkommando lauten, damit in @files genau die selbe Sorteirreihenfolge wie in WinXP gespeichert ist?
1 2 3 4 5 6 7 8 9 10
opendir(DIR,$directory); my @files = map { $_->[1] } sort { $b cmp $a } map { ["$directory/$_", $_] } (readdir DIR); print "$_\n" foreach @files;
2012-02-04T13:27:42 GUIfreundCode (perl): (dl )1 2 3 4 5 6 7 8 9 10opendir(DIR,$directory); my @files = map { $_->[1] } sort { $b cmp $a } map { ["$directory/$_", $_] } (readdir DIR); print "$_\n" foreach @files;
QuoteWenn du Ordner und Dateien getrennt haben willst, wirst du zwei Durchläufe brauchen.
1 2 3 4 5 6 7 8
# verzeichnis/datei, änderungsdatum my @files = map { $_->[2] } sort { $b->[0] <=> $a->[0] or $b->[1] <=> $a->[1] } map { [-d "$dir/$_" || 0, -M "$dir/$_", $_] } readdir $dh;
1 2 3 4 5 6 7 8
# verzeichnis/datei, alphanumerisch my @files = map { $_->[1] } sort { $b->[0] <=> $a->[0] or $b->[1] cmp $a->[1] } map { [-d "$dir/$_" || 0, $_] } readdir $dh;
QuoteOder wenn das nicht geht, dann wäre auch eine Sortierung nach Datum, oder Größe in Ordnung.
2012-02-04T13:57:58 pqzweitens vergleichst du in sort $a und $b, aber $a und $b sind array-referenzen, da wirst du also eher was zufälliges rausbekommen.
print "$_\n" foreach (readdir DIR);
2012-02-04T16:46:17 GUIfreund2012-02-04T13:57:58 pqzweitens vergleichst du in sort $a und $b, aber $a und $b sind array-referenzen, da wirst du also eher was zufälliges rausbekommen.
Ich vergleiche (zugegebener Weise ungewollt) Referenzen auf anonyme Arrays, sortiere also nach ihrer Erzeugungsfolge, letztlich also nach der Reihenfolge, in der die Dateinamen von readdir geliefert werden.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
my @a;
for (0..10) {
my $ref = [$_];
push @a, $ref;
}
for (sort { $a cmp $b } @a) {
say "ref: $_ item: $_->[0]"
}
ref: ARRAY(0x833da18) item: 0
ref: ARRAY(0x8358198) item: 1
ref: ARRAY(0x83581b8) item: 6
ref: ARRAY(0x8358208) item: 4
ref: ARRAY(0x8358258) item: 5
ref: ARRAY(0x83582e8) item: 3
ref: ARRAY(0x8358338) item: 2
ref: ARRAY(0x83584a8) item: 8
ref: ARRAY(0x83584d8) item: 7
ref: ARRAY(0x8364ea0) item: 9
ref: ARRAY(0x8364ed0) item: 10
2012-02-04T15:44:51 IceRageEs geht mir darum, dass ich die Sortierung im Explorer im Abgleich mit der Perlsortierung benötige. Ich gehe davon aus, das ein beliebiger Datei-Öffnen-Dialog, die Sortierung in gleicher Weise wie der Explorer anzeigt. Bisher war das zumindest immer so, weshalb ich annehme, dass, auch bei einer möglichen Änderung der Sortierung des Explorers, sich diese in beliebige Datei-Öffnen-Dialoge übertrüge.
2012-02-04T15:44:51 IceRageWas mir aufgefallen ist: Wenn ich in der Konsole DIR /o verwende, erhalte ich exakt die Sortierung, wie sie auch im Explorer (Datei-Öffnen-Dialoge) angezeigt wird.
2012-02-04T15:44:51 IceRageDiese ist aber dennoch unterschiedlich zur Reihenfolge in Perl bei mir.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
04.02.2012 19:13 <DIR> .
04.02.2012 19:13 <DIR> ..
04.02.2012 17:00 <DIR> dummer_ordner
04.02.2012 16:33 <DIR> schlauer_ordner
04.02.2012 03:14 2.312 check_clip_n_pics.pl
06.10.2011 09:06 1.421 check_online_status_uploaded.pl
03.02.2012 21:30 1.428 clean_db_field.pl
03.09.2011 21:47 1.409 ClipnameManipulator.pl
04.02.2012 16:37 0 kacke.txt
03.02.2012 21:44 1.588 Kopie von check_clip_n_pics.pl
04.02.2012 19:14 0 log.log
23.09.2011 09:04 1.788 manipulate_db_field.pl
10.10.2011 00:02 168.296 online_check.log
04.02.2012 19:12 581 open_with_backticks.pl
12.09.2011 15:55 1.874 post_Sexuria.pl
23.09.2011 23:17 4.093 posting.log
23.09.2011 23:02 3.772 sexuria_poster.pl
01.10.2011 22:16 819 uppedfiles_control.pl
18.08.2011 15:52 825 video_pic_inf.pl
18.08.2011 15:52 27.847 video_pic_info.txt
16 Datei(en) 218.053 Bytes
4 Verzeichnis(se), 44.976.467.968 Bytes frei
1 2 3
opendir(DIR,"C:\\perl-dev\\project_2"); my @ar_files = sort { $a cmp $b } readdir(DIR); closedir(DIR);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.
..
ClipnameManipulator.pl
Kopie von check_clip_n_pics.pl
check_clip_n_pics.pl
check_online_status_uploaded.pl
clean_db_field.pl
dummer_ordner
kacke.txt
log.log
manipulate_db_field.pl
online_check.log
open_with_backticks.pl
post_Sexuria.pl
posting.log
schlauer_ordner
sexuria_poster.pl
uppedfiles_control.pl
video_pic_inf.pl
video_pic_info.txt
1 2 3 4 5 6 7
my @files = map { $_->[2] } sort { $b->[0] <=> $a->[0] or $b->[1] cmp $a->[1] } map { [-d "$dir/$_" || 0, lc $_, $_] } readdir $dh;
1 2 3 4 5 6 7
my @files = map { $_->[1] } sort { $b->[0] cmp $a->[0] } map { [ ((not -d "$dir/$_") || 0) . lc $_, $_] } readdir $dh;
2012-02-04T18:43:05 pqsieht für mich aus nach:
1. sortierung nach verzeichnis / datei
2. sortierung alphanumerisch, case-insensitive
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
use warnings; use strict; my $dir = 'C:/MyFolder'; opendir(my $dh, $dir); my @files = map { $_->[2] } sort { $b->[0] <=> $a->[0] or $a->[1] cmp $b->[1] } map { [-d "$dir/$_" || 0, lc $_, $_] } readdir $dh; print "$_\n" for @files;
2012-02-04T23:36:09 IceRageDie Sortierung ist so entscheidend, weil an Hand dieser sehr viel leichter Dateienlisten miteinander vergleichen kann.
Quote... ich ein Skript laufen lasse, dessen Output ich aber mit der Sortierung im Explorer vergleichen will, bzw. im Datei-Öffenen-Dialog eines anderen Programmes
2012-02-05T14:39:09 IceRageEs ist so, dass ich dem Programm alle 1000 Dateien zur Verarbeitung übergebe, und dann die übrigen, die bei dem Programm im ersten Durchgang mit Fehler beendet wurden, aus den 1000 heraussuchen will.
2012-02-05T14:39:09 IceRageEs ist so, dass ich dem Programm alle 1000 Dateien zur Verarbeitung übergebe, und dann die übrigen, die bei dem Programm im ersten Durchgang mit Fehler beendet wurden, aus den 1000 heraussuchen will.