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 で作ったりすると楽ですね~。ただ逆に、こういうのって数か月、数年置きにもう一回ほしくなるので、やっぱり残しておいた方がいいのかな・・・

VBA でフォルダパスを指定して、ファイルレベルの検索と置換ツールを作ってみる

大量にある Excel ファイルに対して、確認と修正作業を入れなければいけないときとかに欲しくなるやつですね~。

続きを読む

VBA から VBA を呼び出したかったけどできなかったから、代替案で我慢した

VBA 内で他の ExcelVBA を呼び出したかったのですが(Excel 側のセキュリティを緩めないと)ダメくさいので、代替え案でいいやと思いました。という話です。

続きを読む

PowerShell から VBA を実行させる

以前、NuGet 無し PowerShell 経由で Excel 操作を断念したわけですが、それでは処理自体は VBA に任せて PowerShell は処理実行をキックする役目を持ってはどうか?と思案が推移しました。無駄技術を極めるシリーズの始まりです!

続きを読む