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