匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

perlでファイル名でソートさせる方法


ディレクトリの中にある画像をファイル名順でソートさせて表示させたいです。
写真は日付+ナンバーで管理しようとしています。
(2017年1月1日の1枚目なら20170101_001.jpgのような感じでファイル名が小さい=古い写真となります)

現在以下の方法で「アップ時間(?)が新しい物が上にくる」ようにしていたのですが、FFFTPでアップするとなぜかたまに順番通りにアップしてくれない事があるのでファイル名順に変えようと思ってます。

##ディレクトリオープン
# 対象ディレクトリ(CGIを設置するディレクトリから見た位置を指定する
my $dir = "$dir$in{'vno'}";
opendir DIR, $dir;

# jpegファイルだけ取得
my @jpeg_files = grep { $_ =~ /\.jpe?g$/i } readdir DIR;
closedir DIR;

# 日付を取得して新しいのが上に来るようにする
my @sorted_files =
map { $_->[0] }
sort { $b->[1] <=> $a->[1] }
map { my @st = stat "$dir/$_"; [ $_, $st[9] ] } @jpeg_files;

foreach my $pname (@sorted_files) {
print <<"EOM";
<li><a href="./images/$in{'vno'}/$pname" class="fb" rel="g1"><IMG SRC="./images/$in{'vno'}/$pname" class="test"></a></li>
EOM
}
「my @sorted_files」の部分を変えればいいと思うのですが、どのように変更したらファイル名順に変わってくれますか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2017/01/26 14:05:53
  • 終了:2017/01/28 11:08:40

ベストアンサー

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2017/01/28 00:17:48

単に

my @sorted_files = sort @jpeg_files;

でよいのでは

ソート前の物が必要ないなら最初から

my @jpeg_files = sort grep { $_ =~ /\.jpe?g$/i } readdir DIR;

とするとか

次のようなスクリプトでテストしたら行けたんで大丈夫ではないかと

use strict;
use warnings;
use List::Util;

my @data = ();

for(1..10) {
	my($year,$month,$day) = (localtime(rand(time())))[5,4,3];
	for my $i(1..rand(10)+1) {
		my $file = sprintf("%04d%02d%02d_%03d.jpg",$year+1900,$month+1,$day,$i);
		push @data,$file;
	}
}
@data = List::Util::shuffle @data;

print "$_\n" for @data;

print '-'x16,"\n";

print "$_\n" for sort @data;
匿名質問者

ありがとうございます!

2017/01/28 11:08:34

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません