前スレ
PowerShell -Part 4
https://mevius.5ch.net/test/read.cgi/tech/1577862511/
次スレは>>980が立ててね!!
探検
PowerShell -Part 5
レス数が1000を超えています。これ以上書き込みはできません。
2021/03/18(木) 00:29:52.04ID:/MpReTiX
968デフォルトの名無しさん
2022/02/10(木) 19:36:03.95ID:/6XFwXXi >>967
>$textbox1.leave
ここで行を分けてしまうとpowershellのパーサは一旦解釈を終えてしまうからイベントハンドラとして登録できてない。
それとイベンントハンドラの名前は頭にadd_〜を付ける決まりになってる(なぜかは知らない)
従って下のように記述する。
$textbox1.add_leave({
$label1.text = "テスト"
})
それとテキストボックスだけではフォーカスの移動が確認できないから
ボタンとか適当なフォーカスを持つコントロールを配置しておく
$button1 = [System.Windows.Forms.Button]@{ Location="10,50"; Size="80,20"; Text="ボタン"; FlatStyle="popup"}
$form.Controls.Add($button1)
$textbox1.add_leave({ $label1.text = "leave" })
$textbox1.add_enter({ $label1.text = "enter" })
$label1.text = "テスト"
$result = $form.ShowDialog()
>$textbox1.leave
ここで行を分けてしまうとpowershellのパーサは一旦解釈を終えてしまうからイベントハンドラとして登録できてない。
それとイベンントハンドラの名前は頭にadd_〜を付ける決まりになってる(なぜかは知らない)
従って下のように記述する。
$textbox1.add_leave({
$label1.text = "テスト"
})
それとテキストボックスだけではフォーカスの移動が確認できないから
ボタンとか適当なフォーカスを持つコントロールを配置しておく
$button1 = [System.Windows.Forms.Button]@{ Location="10,50"; Size="80,20"; Text="ボタン"; FlatStyle="popup"}
$form.Controls.Add($button1)
$textbox1.add_leave({ $label1.text = "leave" })
$textbox1.add_enter({ $label1.text = "enter" })
$label1.text = "テスト"
$result = $form.ShowDialog()
969デフォルトの名無しさん
2022/02/11(金) 00:44:40.14ID:xWKZ1gm4970デフォルトの名無しさん
2022/02/12(土) 03:20:20.24ID:NDMck+ft ネタだろ
971デフォルトの名無しさん
2022/02/12(土) 16:09:12.24ID:8ted8XK+ 入力コントロールがフォーカスを失ったという、イベントは無いの?
972デフォルトの名無しさん
2022/02/12(土) 21:15:19.39ID:JXSQUy8V973デフォルトの名無しさん
2022/02/13(日) 17:33:00.74ID:zeKJdxT+ よろしくお願いします。
現在開いているexcelのアクティブブックを捕まる方法ないでしょうか??
例えば、アクティブブックのアクティブシートにのってるグラフの軸を全て変更したい時に、
excelからpowershell ISEに画面を変えて操作したいのです。
現在開いているexcelのアクティブブックを捕まる方法ないでしょうか??
例えば、アクティブブックのアクティブシートにのってるグラフの軸を全て変更したい時に、
excelからpowershell ISEに画面を変えて操作したいのです。
974デフォルトの名無しさん
2022/02/13(日) 17:40:39.22ID:0qwas07F >>973
Pythonおすすめ
Pythonおすすめ
975デフォルトの名無しさん
2022/02/13(日) 17:44:20.75ID:zeKJdxT+ >974
ありがとうございます。
xlwingsだとアクティブブックつかめるけど、グラフの細かな設定がない
openpyxlだとアクティブブックをつかめなさそう、
でpowershellでできないかな、と。
ありがとうございます。
xlwingsだとアクティブブックつかめるけど、グラフの細かな設定がない
openpyxlだとアクティブブックをつかめなさそう、
でpowershellでできないかな、と。
976デフォルトの名無しさん
2022/02/13(日) 17:47:29.32ID:0qwas07F >>975
グラフもPythonで描けばいい
グラフもPythonで描けばいい
977デフォルトの名無しさん
2022/02/13(日) 17:55:51.10ID:lPImUKwL pandasに無いような高等な統計関数が必要でないかぎりpythonで完結したほうが楽なんじゃね
978デフォルトの名無しさん
2022/02/13(日) 18:02:06.97ID:zeKJdxT+ ありがとうございます。
まぁ、会社でみながexcel使ってるので、、こんな質問をしている次第です、、
まぁ、会社でみながexcel使ってるので、、こんな質問をしている次第です、、
979デフォルトの名無しさん
2022/02/13(日) 18:06:52.02ID:PEAS4D91 シートの名前やらインデックスがpwshでわかれば、その情報をpythonに渡してmatplotlibでtemp.jpgとかで吐き出したグラフをまたpwshで貼れば行ける気がする
980デフォルトの名無しさん
2022/02/13(日) 18:34:35.90ID:Z5jSGqeY ActiveWorkBookプロパティで捕まえられるでしょ
VBAから呼んでもPowershellから呼んでもPythonから呼んでもいい
VBAから呼んでもPowershellから呼んでもPythonから呼んでもいい
981デフォルトの名無しさん
2022/02/13(日) 18:37:17.22ID:LaQ04ZoE982デフォルトの名無しさん
2022/02/13(日) 18:41:38.57ID:LaQ04ZoE 余計なお世話ついでに
ISEはもう終わったプロジェクトなので
後継のVSCode+Powershellプラグインに乗り換えるのがオススメ
ISEはもう終わったプロジェクトなので
後継のVSCode+Powershellプラグインに乗り換えるのがオススメ
983デフォルトの名無しさん
2022/02/13(日) 20:32:19.65ID:zeKJdxT+ 色々アドバイスありがとうございました。
それもそだな、と下記でいけました。お騒がせいたしました
$Excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
$Excel.ActiveWorkbook.ActiveSheet.name
それもそだな、と下記でいけました。お騒がせいたしました
$Excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
$Excel.ActiveWorkbook.ActiveSheet.name
984デフォルトの名無しさん
2022/02/21(月) 13:09:23.89ID:jIppNsU3 教えて下さい
powershellで再帰処理をしたいんですが、
"The script failed due to call depth overflow"
と言うエラーで最後まで処理してくれません。
再帰回数のスタックオーバーフローで
トランポリン処理が有効とまでは調べたのですが
上手く理解出来ず
↓↓
https://qiita.com/yumura_s/items/8a44a70e3e11c4eb1464
詳しい方、よろしくお願いします
powershellで再帰処理をしたいんですが、
"The script failed due to call depth overflow"
と言うエラーで最後まで処理してくれません。
再帰回数のスタックオーバーフローで
トランポリン処理が有効とまでは調べたのですが
上手く理解出来ず
↓↓
https://qiita.com/yumura_s/items/8a44a70e3e11c4eb1464
詳しい方、よろしくお願いします
985デフォルトの名無しさん
2022/02/21(月) 13:24:10.95ID:Vv5lB4cH そのメッセージの言わんとするところは、すげー効率悪いので再帰で書くな
というアドバイスです
というアドバイスです
986デフォルトの名無しさん
2022/02/21(月) 13:39:08.84ID:jIppNsU3 対象データが階層構造になっていて、
網羅的に処理したいんですが、うーん
網羅的に処理したいんですが、うーん
987デフォルトの名無しさん
2022/02/21(月) 14:08:41.32ID:Vv5lB4cH 500階層あるデータ構造はさすがに扱ったことがない…
そもそも特定の枝が底なし沼なのだとしたら、それでも延々と潜り続ける、というのは本当に意図した挙動なのか?
底なし沼が時々存在して、それに興味が無いのならば素直な余再帰で書ける幅優先探索を勧める
深さ優先で頑張りたいなら、スタックとしてコールスタックを流用するのでなくて、明示的にスタックにpush/popすると少しは経済的
特定の深さに達したら諦める決め打ちもあり
トランポリンで遅延評価を積む利点は、入力データ構造を処理するというより、需要に応じて任意の深さのデータを出力できるという点にあるので、悪手かと
そもそも特定の枝が底なし沼なのだとしたら、それでも延々と潜り続ける、というのは本当に意図した挙動なのか?
底なし沼が時々存在して、それに興味が無いのならば素直な余再帰で書ける幅優先探索を勧める
深さ優先で頑張りたいなら、スタックとしてコールスタックを流用するのでなくて、明示的にスタックにpush/popすると少しは経済的
特定の深さに達したら諦める決め打ちもあり
トランポリンで遅延評価を積む利点は、入力データ構造を処理するというより、需要に応じて任意の深さのデータを出力できるという点にあるので、悪手かと
988デフォルトの名無しさん
2022/02/21(月) 14:17:30.40ID:+uSXi1Gh トランポリン?のやってることはSchemeで言うCPS相当だね。まずCPSを理解しないと何が起きてるのか判らないと思う。
であるならば理屈ではトランポリンなんて変な事しなくてもスクリプトブロックをクロージャにするやつだけで再帰をクロージャの連鎖呼び出しに置き換えることはできると思う。
であるならば理屈ではトランポリンなんて変な事しなくてもスクリプトブロックをクロージャにするやつだけで再帰をクロージャの連鎖呼び出しに置き換えることはできると思う。
989デフォルトの名無しさん
2022/02/21(月) 14:38:31.70ID:Vv5lB4cH (実装は暗黙のCPSかもしれないけど) schemeだとdelay/forceそのまんまじゃね
イテレータとかストリームとか色んな言い方があるけど、何にせよ処理すべきデータがまだ存在していないような時にのみ有効
もし処理対象のデータが既に存在しているのなら、単に無駄な計算を増やすだけだよ
イテレータとかストリームとか色んな言い方があるけど、何にせよ処理すべきデータがまだ存在していないような時にのみ有効
もし処理対象のデータが既に存在しているのなら、単に無駄な計算を増やすだけだよ
990デフォルトの名無しさん
2022/02/21(月) 14:43:51.48ID:+uSXi1Gh 再帰処理したいつってる本人が理解できないと意味ないからな
再帰が軽い言語で処理すりゃいいんじゃねーの
再帰が軽い言語で処理すりゃいいんじゃねーの
991デフォルトの名無しさん
2022/02/21(月) 15:22:36.66ID:002PyiUh コールスタック制限してない言語の方が珍しいと思うがね、スクリプト言語なら500-1000くらいが標準的か
とりあえず言語によって課される安全装置としてのコールスタック制限を回避したいのなら、>>984が求めている資料はこれだと思うhttps://www.python.org/doc/essays/graphs/(pwshじゃなくてすまん)
生リスト(配列)を使ってもいいけど、現実的な時間で可能なのか怪しい程の難問なので、これの出番かも
https://docs.microsoft.com/en-us/dotnet/api/system.collections.stack?view=net-6.0
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.stack-1?view=net-6.0
とりあえず言語によって課される安全装置としてのコールスタック制限を回避したいのなら、>>984が求めている資料はこれだと思うhttps://www.python.org/doc/essays/graphs/(pwshじゃなくてすまん)
生リスト(配列)を使ってもいいけど、現実的な時間で可能なのか怪しい程の難問なので、これの出番かも
https://docs.microsoft.com/en-us/dotnet/api/system.collections.stack?view=net-6.0
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.stack-1?view=net-6.0
992デフォルトの名無しさん
2022/02/21(月) 15:34:29.48ID:002PyiUh ごめんdfsだわこれ
全要素網羅したい、という要求だからどっちでもいいと思うけど
queueはこれ使うと配列よりかなり速いはず
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.queue-1?view=net-6.0
全要素網羅したい、という要求だからどっちでもいいと思うけど
queueはこれ使うと配列よりかなり速いはず
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.queue-1?view=net-6.0
993デフォルトの名無しさん
2022/02/21(月) 16:03:11.06ID:jIppNsU3 すみません、めちゃくちゃ難しいっす
なんとなくリンク先のスクリプトが
動かせればと思ったのですが…
やはり悪手なんですかね
なんとなくリンク先のスクリプトが
動かせればと思ったのですが…
やはり悪手なんですかね
994デフォルトの名無しさん
2022/02/21(月) 16:22:43.74ID:Vv5lB4cH データのサンプル、期待する出力を書いてくれれば具体的なコード提案できるかも(たぶん)
995デフォルトの名無しさん
2022/02/21(月) 18:40:11.40ID:jIppNsU3 色々回答してありがとうございました
結局再帰を使わずループで代用する
こととしました
トランポリンはもう少し
勉強してみたいと思います
結局再帰を使わずループで代用する
こととしました
トランポリンはもう少し
勉強してみたいと思います
996デフォルトの名無しさん
2022/02/21(月) 20:07:10.97ID:+uSXi1Gh powershell内でC#埋め込めばいいんじゃないの
あいにくpowershellのクロージャはダイナミックスコープで使えたもんじゃないのでC#のサンプルだけ
Add-Type -TypeDefinition @"
using System;
public static class test {
static int fib(int n) { //普通の再帰
if (n < 2) {
return n;
} else {
return fib(n - 1) + fib(n - 2);
}
}
static void fibcps(int n, Action<int> cont) { // CPS(継続渡しスタイル)
if (n < 2) {
cont(n);
} else {
fibcps(n - 1, n1 =>
fibcps(n - 2, n2 =>
cont(n1 + n2)));
}
}
public static void recurse() {
for (var n = 0; n <= 20; ++n) {
Console.WriteLine("fib {0}: {1}",n,fib(n)); //普通の再帰
fibcps(n, r => Console.WriteLine("fibcps {0}: {1}",n,r)); // CPS(継続渡しスタイル)
}
}
}
"@
[test]::recurse()
あいにくpowershellのクロージャはダイナミックスコープで使えたもんじゃないのでC#のサンプルだけ
Add-Type -TypeDefinition @"
using System;
public static class test {
static int fib(int n) { //普通の再帰
if (n < 2) {
return n;
} else {
return fib(n - 1) + fib(n - 2);
}
}
static void fibcps(int n, Action<int> cont) { // CPS(継続渡しスタイル)
if (n < 2) {
cont(n);
} else {
fibcps(n - 1, n1 =>
fibcps(n - 2, n2 =>
cont(n1 + n2)));
}
}
public static void recurse() {
for (var n = 0; n <= 20; ++n) {
Console.WriteLine("fib {0}: {1}",n,fib(n)); //普通の再帰
fibcps(n, r => Console.WriteLine("fibcps {0}: {1}",n,r)); // CPS(継続渡しスタイル)
}
}
}
"@
[test]::recurse()
997デフォルトの名無しさん
2022/02/21(月) 21:16:04.35ID:+uSXi1Gh 一応powershell版。ただしpowershell関数は末尾再帰の最適化をしてくれないためCPSで書いてもただの効率悪い再帰にしかならない。
上のC#も32bit環境だと末尾再帰の最適化が働かないため64bit環境でのみ有効なコード。
function fib($n) {
if ($n -lt 2) {
$n
} else {
(fib ($n - 1)) + (fib ($n - 2))
}
}
function fibcps($n, $cont) {
if ($n -lt 2) {
& $cont $n
} else {
fibcps ($n - 1) {param($fib1); $cont = $cont
fibcps ($n - 2) {param($fib2);
& $cont ($fib1 + $fib2) }.GetNewClosure()}.GetNewClosure()
}
}
1..10 | %{ $r=fib $_; "fib($_):$r" }
1..10 | %{ fibcps $_ {param([int]$r) "fibcps($_):$r"}.GetNewClosure() }
上のC#も32bit環境だと末尾再帰の最適化が働かないため64bit環境でのみ有効なコード。
function fib($n) {
if ($n -lt 2) {
$n
} else {
(fib ($n - 1)) + (fib ($n - 2))
}
}
function fibcps($n, $cont) {
if ($n -lt 2) {
& $cont $n
} else {
fibcps ($n - 1) {param($fib1); $cont = $cont
fibcps ($n - 2) {param($fib2);
& $cont ($fib1 + $fib2) }.GetNewClosure()}.GetNewClosure()
}
}
1..10 | %{ $r=fib $_; "fib($_):$r" }
1..10 | %{ fibcps $_ {param([int]$r) "fibcps($_):$r"}.GetNewClosure() }
998デフォルトの名無しさん
2022/02/21(月) 21:38:24.93ID:MnJW8OUO 変なやり方を広めようとするやつの典型例
999デフォルトの名無しさん
2022/02/22(火) 00:12:46.08ID:wYlI3N7E あえて混乱させようとしてるようにしか思えない
仮に末尾最適化でシリアルなコードを得たとして、まさかそれが木の探索に有利だとでも?
呼び出しをstart-(thread)jobで行ってスレッド/プロセスをばら撒けば済む話じゃないの
コールスタック溢れるような計算であればあるほど、スケーラブルで高速
仮に末尾最適化でシリアルなコードを得たとして、まさかそれが木の探索に有利だとでも?
呼び出しをstart-(thread)jobで行ってスレッド/プロセスをばら撒けば済む話じゃないの
コールスタック溢れるような計算であればあるほど、スケーラブルで高速
1000デフォルトの名無しさん
2022/02/22(火) 02:35:33.30ID:LHZaRsEg スタックを使わない再帰呼び出しならスタックは溢れないなw
個々の再帰呼び出しをStart-ThreadJob/Wait/Receiveで機械的に置き換えればとりあえず動く雛形にはなる
代わりにプロセス/スレッドが溢れるけど、スレッドなら単に順番待ちに入るだけで悪さはしない
個々のワーカーが自身の子をwaitしている限りはオーバーヘッドでしかないので、メインプロセスを設けStart時に-StreamingHostで直接報告を挙げさせるべき
長く走ってる枝を殺す等、最適化の可能性は大
メモ化や大域脱出程度で済むような問題には薦めない
個々の再帰呼び出しをStart-ThreadJob/Wait/Receiveで機械的に置き換えればとりあえず動く雛形にはなる
代わりにプロセス/スレッドが溢れるけど、スレッドなら単に順番待ちに入るだけで悪さはしない
個々のワーカーが自身の子をwaitしている限りはオーバーヘッドでしかないので、メインプロセスを設けStart時に-StreamingHostで直接報告を挙げさせるべき
長く走ってる枝を殺す等、最適化の可能性は大
メモ化や大域脱出程度で済むような問題には薦めない
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 341日 2時間 5分 41秒
新しいスレッドを立ててください。
life time: 341日 2時間 5分 41秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- インド軍が係争地のパキスタン側に攻撃 26人犠牲テロへの報復 [七波羅探題★]
- 【文春】《記事予告》国民的女優&人気俳優 不倫スクープ第2弾 ★5 [Ailuropoda melanoleuca★]
- 若年層も注意「人や物の名前が出てこない」もしかしたらスマホ認知症かも…原因は「スマホの使い過ぎ」 [七波羅探題★]
- アイヌに対する差別偏見“見聞きしたことある”回答の1割 政府 [香味焙煎★]
- 【サッカー】UEFA-CL準決勝第2戦 インテル×バルセロナ [久太郎★]
- 日テレ「マジカル頭脳パワー!!」「THE夜もヒッパレ」「天声慎吾」「歌の大辞テン」など装い新たに蘇る [ひかり★]
- 「45歳だけど、大学に行って勉強し直そうと思う」 なぜかこれが日本だと笑われる件。おかしくないか?この国 [377388547]
- 【動画】日本さん、ゾンビが発生したら銃がないので確実に詰むことが証明されてしまう これ銃ないと絶対無理だろ、、、 [689851879]
- ダブパンマン出禁の🏡
- 【正論】玉木雄一郎「テスラやBYDのEVからはガソリン税を取れない😤暫定税率は廃止するべき😤」 [519511584]
- マチュ「キラキラだぁ」「シュウジ♥」「ニャァン💢」👈逆にこいつに共感できるやついるの? [606757419]
- なぜ鉄血のオルフェンズ2期は駄作と言われるのか