昨日の「MP3ファイルのタグ情報を表示してみる」から、さらにソートしてみました。
GetMp3Info_Sort.ps1
$sh = New-Object -ComObject Shell.Application $music = "C:\work\mp3" $folder = $sh.Namespace($music) $items = Get-ChildItem -Path $music -Include *.mp3 -Name #空の配列を定義 $array = @() foreach($f in $items) { $fi = $folder.ParseName($f) $num = $folder.GetDetailsOf($fi,26).PadLeft(2,"0") $title = $folder.GetDetailsOf($fi, 21) $time = $folder.GetDetailsOf($fi, 27) $size = $folder.GetDetailsOf($fi,1) #ジャグ配列に格納 $array += ,@($num, $title, $time, $size) } Write-Host "■ソート前" Write-Host "トラック番号 タイトル 長さ ファイルサイズ" Write-Host "----------------------------------------------" for($i = 0; $i -lt $array.Count; $i++) { $rec = "" for($j = 0; $j -lt $array[$i].Count; $j++) { $work = [string]$array[$i][$j] $rec = $rec + $work + " " } Write-Host $rec } #ソート(バブルソート) for($i = 0; $i -lt ($array.Count - 1); $i++) { for($j = ($array.Count - 1); $j -gt $i; $j--) { if ($array[$j - 1][0] -gt $array[$j][0]) { $tmp = $array[$j - 1] $array[$j - 1] = $array[$j] $array[$j] = $tmp } } } Write-Host "" Write-Host "■ソート後" Write-Host "トラック番号 タイトル 長さ ファイルサイズ" Write-Host "----------------------------------------------" for($i = 0; $i -lt $array.Count; $i++) { $rec = "" for($j = 0; $j -lt $array[$i].Count; $j++) { $work = [string]$array[$i][$j] $rec = $rec + $work + " " } Write-Host $rec }
実行結果
■ソート前 トラック番号 タイトル 長さ ファイルサイズ ---------------------------------------------- 10 4 Real 00:03:28 5.41 MB 12 Alice (Extended Version) 00:05:00 6.85 MB 19 Bad Reputation 00:02:42 4.42 MB 01 Black Star 00:01:34 2.16 MB 11 Darlin 00:03:50 5.73 MB 08 Everybody Hurts 00:03:41 5.80 MB 14 Goodbye 00:04:32 6.05 MB 07 I Love You 00:04:01 6.24 MB 18 Knockin' On Heaven's Door 00:02:52 3.38 MB 09 Not Enough 00:04:18 6.25 MB 16 Push (Acoustic) 00:02:46 4.37 MB 03 Push 00:03:01 4.82 MB 13 Remember When 00:03:29 5.37 MB 05 Smile 00:03:29 5.05 MB 06 Stop Standing There 00:03:27 5.19 MB 15 What The Hell (Acoustic) 00:03:40 5.57 MB 02 What The Hell 00:03:40 5.15 MB 17 Wish You Were Here (Acoustic) 00:03:45 5.45 MB 04 Wish You Were Here 00:03:45 5.52 MB ■ソート後 トラック番号 タイトル 長さ ファイルサイズ ---------------------------------------------- 01 Black Star 00:01:34 2.16 MB 02 What The Hell 00:03:40 5.15 MB 03 Push 00:03:01 4.82 MB 04 Wish You Were Here 00:03:45 5.52 MB 05 Smile 00:03:29 5.05 MB 06 Stop Standing There 00:03:27 5.19 MB 07 I Love You 00:04:01 6.24 MB 08 Everybody Hurts 00:03:41 5.80 MB 09 Not Enough 00:04:18 6.25 MB 10 4 Real 00:03:28 5.41 MB 11 Darlin 00:03:50 5.73 MB 12 Alice (Extended Version) 00:05:00 6.85 MB 13 Remember When 00:03:29 5.37 MB 14 Goodbye 00:04:32 6.05 MB 15 What The Hell (Acoustic) 00:03:40 5.57 MB 16 Push (Acoustic) 00:02:46 4.37 MB 17 Wish You Were Here (Acoustic) 00:03:45 5.45 MB 18 Knockin' On Heaven's Door 00:02:52 3.38 MB 19 Bad Reputation 00:02:42 4.42 MB
ソートするにはやはりトラック番号の比較が出来ないといけないので、とりあえず取得したデータをジャグ配列に格納してみました。
ソートは、単純にバブルソートで並び替えてます。
速度のことを考えればクイックソートがいいと思いますが、この程度の要素数ならバブルソートで十分です。
あとは、クラスを作ってListでソートすればもっとすっきり出来そうな気もしますが・・・、それはまたいずれ。
スポンサーリンク