2014年1月20日月曜日

◆Ordered Hash Tableについてもメモ

ハッシュテーブルの順番は通常保証されていない。
image

保証するためには以下のように「Ordered」型に変換してあげる。
image

Insertなんかも出来るようになる。
image

この「Ordered」は3.0から追加された機能なので、2.0で使う場合は「Orderd」の実体である「OrderedDictionary」クラスを使う。
image

2014年1月9日木曜日

◆Foreach-Objectコマンドレットのループを抜ける

ForEachステートメントなどでは「continue」や「break」が使える(PowerShell: ◆ループを抜ける)が、Foreach-Objectコマンドレットではうまく行かないようだ。
image

どうやら「return」を使うと良さそうだ。
image

2014年1月8日水曜日

◆ダブルクォーテーション無しのCSVについて

頼まれてCSVを編集するスクリプトを作った。

CSVなら簡単簡単と思ったのだが(実際すぐにできたのだが)、出力されたCSVを見て、「ダブルクォーテーション無しにできる?」と言われてはたと考えてしまった。

簡単にできそうなものなのだが、コマンドレットでは対応していない感じ・・・。

ネットで調べても、「あとからReplaceして消せ」みたいな意見が主流。
そもそもニーズがあまり無いのかしらん・・・。
でも~、ExcelなんかでCSV作るとダブルクォーテーションは付いていないのよね。

なんかいただけない感じ。

仕方なく、ダブルクォーテーションを消したのだが、もうひとつおかしな点を指摘された。
項目の後ろにあるスペースが削られてしまうのだと。
見てみると、後ろのスペースは1つ(1バイト)になってしまう。

元のデータにダブルクォーテーションがついていないからなのですかね。
しかも、調べてみると、インポートでも削られるしエクスポートでも削られる仕様の様だ・・・。(><)

結構厳しいなあ・・・。

暫定的に、適当なエンドマークをスペースの後ろにくっ付けてスペースが削除されないようにしておき、後でエンドマークを削るなんて処理でごまかした。

 

まったく別の方法として、CSV系のコマンドレットを使わずに、CSVを配列に入れて処理して、最後にまたくっ付けるなんてのも有りか。

添え字参照になるので、保守性が今一つなのと、なんといってもこいつは処理が重い。

コマンドレットで対応しないかなぁ・・・。