保証するためには以下のように「Ordered」型に変換してあげる。
この「Ordered」は3.0から追加された機能なので、2.0で使う場合は「Orderd」の実体である「OrderedDictionary」クラスを使う。
ForEachステートメントなどでは「continue」や「break」が使える(PowerShell: ◆ループを抜ける)が、Foreach-Objectコマンドレットではうまく行かないようだ。
頼まれてCSVを編集するスクリプトを作った。
CSVなら簡単簡単と思ったのだが(実際すぐにできたのだが)、出力されたCSVを見て、「ダブルクォーテーション無しにできる?」と言われてはたと考えてしまった。
簡単にできそうなものなのだが、コマンドレットでは対応していない感じ・・・。
ネットで調べても、「あとからReplaceして消せ」みたいな意見が主流。
そもそもニーズがあまり無いのかしらん・・・。
でも~、ExcelなんかでCSV作るとダブルクォーテーションは付いていないのよね。
なんかいただけない感じ。
仕方なく、ダブルクォーテーションを消したのだが、もうひとつおかしな点を指摘された。
項目の後ろにあるスペースが削られてしまうのだと。
見てみると、後ろのスペースは1つ(1バイト)になってしまう。
元のデータにダブルクォーテーションがついていないからなのですかね。
しかも、調べてみると、インポートでも削られるしエクスポートでも削られる仕様の様だ・・・。(><)
結構厳しいなあ・・・。
暫定的に、適当なエンドマークをスペースの後ろにくっ付けてスペースが削除されないようにしておき、後でエンドマークを削るなんて処理でごまかした。
まったく別の方法として、CSV系のコマンドレットを使わずに、CSVを配列に入れて処理して、最後にまたくっ付けるなんてのも有りか。
添え字参照になるので、保守性が今一つなのと、なんといってもこいつは処理が重い。
コマンドレットで対応しないかなぁ・・・。