sorting - powershell: import-csv | get-member: sort column names / property names based on (original) position. rename colnames? -


the get-member commandlet returns noteproperties sorted alphanumerically. see sample output below.

from import-csv received array in memory, want get-member sort member names original position rather alphanumerical value.

the original sequence visible in $_.psextended.definition string ( column names joined commas)

i cannot in-place edit property names, it's read-only. workaround tried prepend numeric prefix column name, see code below

any better ideas? don't want in-place edit original data file.

 $content = (import-csv -delimiter "`t" $infile_abs  );  $colnames = $content | get-member |  where-object {$_.membertype -eq "noteproperty"} ; #| out-gridview;   $cols = $content | get-member -force | where-object {$_.name -eq "psextended"} ;   echo($cols.definition -replace "psextended" , "");   $i = 0;  $colnames| sort-object  -descending |  foreach-object {     $i++ ;     $cn = [string]::format( "{0:00}_{1}",   $i, $_.name )  ;    write-host  $cn  };  

sample output of psextended

{file name, label, obsdatetime, port#, obs#, exp_flux, iv cdry, iv tcham, iv pressure, iv h2o, iv v3, iv v4, iv rh}

output of $colnames = $content | get-member | out-gridview;

exp_flux    noteproperty    system.string exp_flux=0,99  file name   noteproperty    system.string file name=xxx-11040    iv cdry noteproperty    system.string iv cdry=406.96     iv h2o  noteproperty    system.string iv h2o=9.748   iv pressure noteproperty    system.string iv pressure=100.7  iv rh   noteproperty    system.string iv rh=53.12    iv tcham    noteproperty    system.string iv tcham=16.19     iv v3   noteproperty    system.string iv v3=11.395   iv v4   noteproperty    system.string iv v4=0.759    label   noteproperty    system.string label=5m   obs#    noteproperty    system.string obs#=1     obsdatetime noteproperty    system.string obsdatetime=2011-04-04 13:19:37    port#   noteproperty    system.string port#=1 

edit: (no answers yet)

here custom sorting function, need tell get-member use sorting function. how in pipeline?

 #$orig_seq = $cols.definition -replace "psextended", "" -replace "[{}]", "";  $orig_seq = "file name, label, obsdatetime, port#, obs#, exp_flux, iv cdry, iv tcham, iv pressure, iv h2o, iv v3, iv v4, iv rh";   echo $orig_seq;  #exit;    &{     $bypos= @{};    $i = 0;     $orig_seq.split(",") | % { $bypos[$i++] = $_.trim()}    $order = ([int[]] $bypos.keys) | sort    #$order | %{ ([string]::format( "{0} => {1}",  $_, $bypos[$_])) }    $order | %{ $bypos[$_] }   } 

i found answer in question pscustomobject hashtable

the in-memory data import-csv cmdlet pscustomobject.

its properties (column names) can fetched in original order code

 #fetch in correct order  $content.psobject.properties |  # column names  foreach { $ht2["$($_.name)"] =  $_.value } 

properties can renamed way, see

http://powershell.com/cs/blogs/tips/archive/2009/05/08/renaming-object-properties.aspx

dir | select-object @{name='filename'; expression={$_.name}} 

Comments