当前位置:  开发笔记 > 编程语言 > 正文

如何按排序顺序读取目录中的文件?

如何解决《如何按排序顺序读取目录中的文件?》经验,为你挑选了3个好方法。



1> Andrew Barne..:

readdir可以在数组上下文中调用,所以只需这样做:

opendir( my $data_dh, $data_dir) or die "Cannot open $data_dir\n";
my @files = sort { $a <=> $b } readdir($data_dh);
while ( my $name = shift @files ) {
...


不,默认是不够的.默认值按词法排序,而不是数字排序.2001-09-09T01:46:40之前的时间戳将排在大于之后的大多数时间戳之后,因为它打破了1,000,000,000秒的障碍.

2> Kent Fredric..:

你可以尝试使用一些Glob魔法,glob似乎以排序的方式运行,所以这个:

#  Glob in scalar context iterates the result set internally
while( defined( my $dir = glob($dir . '/*' ) ) ){ 
     print $dir, "\n";
    # $dir is fed ordered and with full names. 
}

要么

# Glob in list context returns all results. 
for( glob($dir.'/*' ) ){ 
  print $dir , "\n";
  # also ordered. 
}

应该管用.小心使用glob,因为这样:

 for(0..20){ 
   printf "%30s|%30s\n", glob($dir.'/*' ), glob($dir.'/*' );
 }

做一些半神奇的事情,并在每一行打印两次目录内容.即:

/foo/bar/a  |  /foo/bar/a
/foo/bar/b  |  /foo/bar/b
/foo/bar/c  |  /foo/bar/c
/foo/bar/d  |  /foo/bar/d



3> brian d foy..:

只需sort在要重新排序的任何列表运算符前面抛出一个.您也不需要将结果存储在数组中.你可以使用foreach:

opendir my($dh), $dirname or die "Could not open directory [$dirname]: $!";

foreach my $file ( sort { $a <=> $b } readdir $dh )
    {
    ...
    }

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有