
昨日の「MP3ファイルのタグ情報を表示してみる」から、さらにソートしてみました。
GetMp3Info_Sort.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | $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でソートすればもっとすっきり出来そうな気もしますが・・・、それはまたいずれ。
スポンサーリンク