昨日の「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でソートすればもっとすっきり出来そうな気もしますが・・・、それはまたいずれ。
スポンサーリンク