2019年2月22日金曜日

PowerShell SortとPSObject

CSVから取り込んでソートするのは、簡単にできた。

-- a.txt -----
No,Speed,Distance
N0,200,600
N500,260,250
N700,280,500
N100,220,400


これを、「Distance 」の降順にした。

--  sortSample.ps1 ----

$CSVDATA=""
$CSVData =Import-Csv "X:\XXXXXXXXXXXXXX\a.txt"
$tScoreSort = $CSVData  | Sort-Object   Distance -Descending

$tScoreSort

--  結果 ----

NAME SPEED Distance
----       -----     --------
N0       200       600
N700   280       500
N100   220       400
N500   260       250


CSVではなく、ソース内で完結したいのだが、どうもうまくいかない。
配列を色々試してみたが、
  「デバッグ: "Sort-Object" - "Distance" が "InputObject" にありません。
と、なんだか要素をうまく引き渡せてない。
最終的に、PSObjectを使って何とか動かした。


-- sortSample3.ps1 -----

$tbl =  ,@("N0",200,600)
$tbl += ,@("N500",260,250)
$tbl += ,@("N700",280,500)
$tbl += ,@("N100",220,400)


$PsDatas = @()


for( $jj =0 ;$jj -lt $tbl.Length;$jj++)
{
    $PsData = New-Object PSObject | Select-Object No, Speed, Distance

    $PsData.No =$tbl[$jj][0]
    $PsData.Speed =$tbl[$jj][1]
    $PsData.Distance =$tbl[$jj][2]

    $PsDatas += $PsData
}

$tScoreSort = $PsDatas  | Sort-Object   "Distance" -Descending

$tScoreSort


--  結果 ----

NAME SPEED Distance
----       -----     --------
N0       200       600
N700   280       500
N100   220       400
N500   260       250



本日の河上選手:お休み
   2/25 ~ 若松