Y a-t-il un moyen de garantir une commande de la liste renvoyée par J'ai le code: p> mais il retourne dans l'ordre aléatoire. Maintenant, je sais qu'il y a beaucoup de solutions via une recherche rapide Google, mais je ne trouve pas l'ordre exact dont j'ai besoin.
Fondamentalement, je veux que les dossiers apparaissent d'abord ou durent, et non entre les fichiers. P> Par exemple, si j'ai la structure de dossier: p> lisdir code>?
file1
file2
file3
folder
folder
4 Réponses :
Vous pouvez utiliser un trier code> pour le faire, en consultant chaque entrée de la liste renvoyée par
lisdier code>.
opendir(my $DIR, '.') or die "Error opening ";
foreach my $file (sort { -d $a <=> -d $b } readdir($DIR)) {
print "$file\n";
}
Bonjour, quand je le fais, j'obtiens d'une valeur non initialisée dans une comparaison numérique (<=>) code>.
Essayez CMP code> au lieu de
<=> code>.
Maintenant, je reçois Utilisation de la valeur non initialisée dans la comparaison de chaînes (CMP) code>. Supprimer le
-D code> des deux rendements Aucune erreur (mais évidemment une sortie incorrecte) ..
On dirait qu'il y a des choses vides dans les valeurs de retour de readdir code>.
<=> code> est correct, BTW.
CMP code> est alphanumérique et
-d code> ne renvoie que
0 code> et
1 code>, donc no
cmP code > nécessaire.
Vous pouvez utiliser Pour une autre idée, vous pouvez regarder Fichier :: Suivant . P> p> partie code> de Liste :: PLUSUtils
Cela fonctionne, c'est facile à lire, et vous l'avez presque certainement déjà déjà. Mais ... votre choix.
Vous pouvez d'abord trier en mettant d'abord les dossiers, puis le tri par nom de fichier / dir, tandis que l'effet similaire peut être obtenu avec, P> for my $file (sort { -f "$src/$a" <=> -f "$src/$b" } readdir($DIR)) {
print "$file\n";
}
Merci, j'espérais cependant une solution plus élégante. Je vais revenir à cela si tout le reste échoue :)
Mis à jour avec une alternative plus simple mais plus lente.
Merci, c'est un meilleur. C'était également le problème avec l'autre solution fournie par Simbabque, il manquait $ src / code> et c'est pourquoi cela ne fonctionnait pas!
Notez également que la seconde ne trie pas par des noms d'entrée.
Par exemple: P> foreach (trier readdir $ DH) {} code> fonctionne bien pour moi.
opendir (my $DIR, "$dir") || die "Error while opening $dir: $!\n";
foreach my $dirFileName(sort readdir $DIR)
{
next if $dirFileName eq '.' or $dirFileName eq '..';
print("fileName: $dirFileName ... \n");
}
Une sorte de tri doit être utilisée.