PowerShell で、C# の LINQ 相当の書き方?
件名の件ですが、どうやら Select() 拡張メソッド相当の命令は Select-Object ではなく ForEach-Object の模様?です。Select-Object は何かのクラスに属するプロパティメンバーのうち、表示したいプロパティメンバーのみにフィルタする、または、任意のクラス、または匿名クラス型メンバーとして作成し直す。という時に使うんでしょうかね?
続きを読む文字列変換と加工
大量にある文字列を加工したい!みたいな、町工場の職人さんバリのことをしたい時があります。正規表現で秀丸とか使ってやるんですが、固定文字列の埋め込み程度なら、以下の方が楽かもです。
$target = " aaa bbb ccc " # 改行で区切る、空行を除外する $items = $target -split "`r`n" $items = $items | Where-Object { $_ -ne "" } # その1.1つずつ SQL 文として表示する foreach ($item in $items) { Write-Host ("INSERT INTO Table1 (Id, Name) VALUES (1, `"" + $item + "`")") } # その2.1つずつ C# のスニペットとして表示する foreach ($item in $items) { Write-Host ("sb.AppendLine(`"" + $item + "`");") }
出力結果
INSERT INTO Table1 (Id, Name) VALUES (1, "aaa") INSERT INTO Table1 (Id, Name) VALUES (1, "bbb") INSERT INTO Table1 (Id, Name) VALUES (1, "ccc") sb.AppendLine("aaa"); sb.AppendLine("bbb"); sb.AppendLine("ccc");
sb
っていう変数はStringBuilder
です。こういう、一時的にプログラムを書きたい場合、Visual Studio だと要らないソースコードが生成されて残っちゃうので(気にしなければいいのだけれど)、PowerShell ISE で作ったり、LINQPad で作ったりすると楽ですね~。ただ逆に、こういうのって数か月、数年置きにもう一回ほしくなるので、やっぱり残しておいた方がいいのかな・・・
文字列結合ってかっこでくくった方が良さげ?
以下を見ると、時と場合によっては、かっこでくくった方がいいみたいですね。
# 間違い Write-Host "aaa" + "bbb" # 正しい Write-Host ("aaa" + "bbb")
出力結果
aaa + bbb aaabbb
PowerShell から VBA を実行させる
以前、NuGet 無し PowerShell 経由で Excel 操作を断念したわけですが、それでは処理自体は VBA に任せて PowerShell は処理実行をキックする役目を持ってはどうか?と思案が推移しました。無駄技術を極めるシリーズの始まりです!
続きを読むExcel を開いて Excel に集計していく VBA
以前、NuGet 無し PowerShell での Excel 操作にチャレンジしてダメだったので、普通に VBA 使って転記するコードです。よくあるコードですね~。
続きを読む