PowerShell -Part 5

レス数が950を超えています。1000を超えると書き込みができなくなります。
2021/03/18(木) 00:29:52.04ID:/MpReTiX
前スレ
PowerShell -Part 4
https://mevius.5ch.net/test/read.cgi/tech/1577862511/

次スレは>>980が立ててね!!
2021/12/17(金) 10:27:09.40ID:YK+z10uu
あとwin11非対応マシンでms配布のロールバック用iso(非ローカライズ版)イメージで再インストール→日本語パック選択した人も該当するはず
oem版はsjisが多いと思う
893デフォルトの名無しさん
垢版 |
2021/12/17(金) 10:32:50.05ID:cFRRrt8D
>>891
Windows Terminalでも起きるんだからconhost.exeは関係ないぞ
2021/12/17(金) 10:42:00.46ID:YK+z10uu
>>893
conhostも[console]もシステムのcpから拾ってくる
wtに関してはsetting.jsonからも設定できる
様々なエンコーディング切り替えられないソフトが混在してて、グローバルに切り替えるのがためらわれるならば
ps/cmd>ms-settings:~(スタート>歯車のやつ)からアプリ毎にエンコーディング設定するのがおすすめ
895デフォルトの名無しさん
垢版 |
2021/12/17(金) 10:56:53.95ID:cFRRrt8D
エンコーディング機能にAutoDetectがあれば良いだけなんだがな
簡単なことを難しくしてしまうのは無能の証なんだよ
PowerShellみててつくづくそう思う
2021/12/17(金) 11:26:52.18ID:aYaid5rJ
オートディテクトはギルティ、頭抱える事になるぞ
素性の良いデータで大体動けばいいような自動化なら、古き良きnkfでも噛ませ
ポータブルにしたいならPSGalleryに純pwsh実装のモジュールが転がってる、クオリティは知らん

i/oエンコーディングをシェルレベルで扱えるのはバベルの塔なwindows環境では重宝する
897デフォルトの名無しさん
垢版 |
2021/12/17(金) 11:27:13.62ID:cFRRrt8D
PowerShellのパイプラインそれ自体がすでに低速なのに文字コードの自動判定すらないとか無能すぎでしょ
898デフォルトの名無しさん
垢版 |
2021/12/17(金) 11:29:06.56ID:cFRRrt8D
>>896
古き良きnkfを噛ませられないからもめてるですよ
パイプでnkfに入力された時点で汚染されてるから
時すでにお寿司なのがPowerShell
2021/12/17(金) 12:26:32.74ID:YK+z10uu
リダイレクトの挙動が不自然に感じるのは、ホストの概念で躓いてるのでは
ホストはコンソールとも限らないし、coreバンドルのコンソールホスト以外にもiseやらaspやら色々あるわけで
なんで設定が分かれてるのか考えるべき
900デフォルトの名無しさん
垢版 |
2021/12/17(金) 12:35:31.53ID:cFRRrt8D
>>899
別にいろんなホストがあってもいいんだよ
昔ながらの標準入出力と棲み分けして提供すべきだったってこと
だけど、十把一絡げにしたせいで昔ながらのパイプ処理まで低速になってしまった
2021/12/17(金) 12:48:55.55ID:BQzVpcl1
>>900
>>856からrelatedで飛べる
https://github.com/PowerShell/PowerShell/issues/1908
で提案されてるような構文はあったら確かに便利かと思う

もちろんcoreの設計とは相容れないから、追加モジュールかwindows pwsh(新)でリリースすることになると思うけど
イイね押しとこう
902デフォルトの名無しさん
垢版 |
2021/12/17(金) 13:16:49.94ID:cFRRrt8D
むしろPowerShelll固有の構文を新しい構文に移行させてほしいくらいだわ
パイプラインにテキスト縛りがある時点でPowerShellは欠陥品なんだよ
903デフォルトの名無しさん
垢版 |
2021/12/29(水) 20:28:55.03ID:/Pws6ORw
PowerShellは以下コマンドをFunction化できない。
[console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(932); $OutputEncoding = [Text.Encoding]::GetEncoding(932);

Function内でしかスコープが有効でないことが原因。$global:OutputEncodingを変えてもダメ。
なのでchcpコマンド相当のことをやろうとしたら手入力するしかない

なんというか、PowerShellは他のシェル言語でできいることができない残念なシェル言語。
オワコン化待ったなし
904デフォルトの名無しさん
垢版 |
2021/12/29(水) 20:49:49.82ID:/Pws6ORw
([console])::OutputEncodingをFunction外にも適用できないことにはchcp相当の機能は実現できない
Powershellからchcpを呼ぶとcmdシェルを介してコマンドプロンプトの初期値が表示されるだけであり、グローバル設定とは無関係

([console])::OutputEncodingが効いたかどうかは、cmd /? で戻されるヘルプ文字列が日本語かどうかで判断できる
2021/12/29(水) 20:57:34.10ID:7YDJokPl
UNIXシェルは糞of糞
やっぱりPowerShellだよな

シェルスクリプトは文字通りの逐次実行
sleepy-yoshi.hatenablog.com/entry/20090917/p1
2021/12/29(水) 23:03:59.28ID:wj529v9h
>>903-904
ドットソースで実行してもだめなの?
function f1 {〜}
. f1
907デフォルトの名無しさん
垢版 |
2021/12/29(水) 23:16:02.98ID:/Pws6ORw
>>906
説明不足だった
やりたいことはコマンド入力じゃなくてSet-PSReadLineKeyHandler -Keyを使ったキーバインドなんだけど
ドット. で反映してくてもScriptBlockやFunctionのスコープに閉じ込められてしまうから解決にならない
908デフォルトの名無しさん
垢版 |
2021/12/29(水) 23:39:26.16ID:/Pws6ORw
ま、そういうエンコーディング切り替え機能をどれだけ充実させても既存のbashやCMDのようなプロセス間通信はできないのでやるだけ無駄ってのはわかってる
2021/12/30(木) 08:42:29.02ID:InFuAQoQ
PowerShellでバイナリ(もしくはエンコーディングが不明なデータ)を扱う
https://qiita.com/boukichi_numloc/items/0f4bb4e73f71c2f0a519
2021/12/30(木) 21:35:12.30ID:FEP7eJXA
powershell内部でcmd呼んだらいいのでは
何がしたいのかわからんけど
2021/12/30(木) 23:22:49.02ID:pA3aK4qE
PowerShellからcmd を呼んだら負け、みたいな抵抗感が少しある
2021/12/31(金) 19:53:42.99ID:YcD3GAD3
残念な仕様はあれども、ちゃんと書けば、ちゃんと動く
クソとは思わんな。便利は便利よ
2022/01/11(火) 22:54:51.08ID:rTZaFBoT
CSVを項目で検索し、ヒットした列を編集したいんだけど、パイプが理解しきれてないせいで上手いこといかない
$ArrCsvData | Where-Object{$_.CodeNo -match $Code} |
このあとにカンマ区切りのテキストファイルを該当列に上書きしたいんだけど、どうすればいいのでしょうか?
2022/01/11(火) 23:45:14.22ID:1S8cvNBi
>>913
まず、ArrCsvDataはCSVからオブジェクトに変換(ConverFrom-CSVやImport-CSV)した物なのかな
じゃないとプロパティで値を呼び出せないよ

「カンマ区切りのテキストファイルを該当列に上書きしたい」の意味が測り兼ねるけど、
条件に合致する行を編集したいなら

$ArrCsvData | ForEach-Object{ if($_.CodeNo -match $Code){$_.編集したい列名 = "編集後の文字列";$_ }

とやる。コツは編集後に「;$_ 」とやって出力する所。じゃないと編集だけして破棄する事になる。

さらにCSVで保存したいなら

〜 | Export-Csv -PSPath "保存先パス"
2022/01/11(火) 23:46:35.07ID:1S8cvNBi
ミス
if文の閉じカッコ忘れてた

$ArrCsvData | ForEach-Object{ if($_.CodeNo -match $Code){$_.編集したい列名 = "編集後の文字列";$_ }



$ArrCsvData | ForEach-Object{ if($_.CodeNo -match $Code){$_.編集したい列名 = "編集後の文字列"} ; $_ }
2022/01/12(水) 00:21:17.01ID:B+xDwNUa
いちいち空行挿むなスカスカ脳
2022/01/12(水) 01:11:14.14ID:0oGT7bUk
>>915
教えていただきありがとうございます

CSVは
「A001,,」
「B001,かきくけこ,12345」
のようなフィールドで
$Code = "A001"を検索し
「A001,あいうえお,12345」
のような内部のテキストファイルがあり、編集したい列名を指定せずにまとめて編集したいと思っています。
実際には編集する項目が多くループさせながら格納だと長くなってしまうため、省略できないかと思い相談させていただきました。
2022/01/12(水) 21:13:44.63ID:vTY0CDWm
gc $csv_in -Encoding Default | %{ $fields = $_ -split ","; if ($fields[0] -match $Code) { $fieldsを加工; $fields -join "," } else { $_ } } | Out-File $csv_out -Encoding Default
2022/01/13(木) 01:49:18.52ID:sU2jW0+6
>>918
ありがとうございます
まだ理解できていないところもありますので勉強しながら試させていただきます
2022/01/18(火) 20:28:41.01ID:4KOVvciD
get-aliasをalias、またはget-serviceをservice、
自作の関数でもget-testとしたらtest、のように
エイリアス定義無しでも
get-を省略して実行出来てしまう(または、省略したらget-*扱いになる)のですが
これについて記載されたドキュメントが何処にあるか
教えて頂けないでしょうか
921デフォルトの名無しさん
垢版 |
2022/01/19(水) 20:37:21.76ID:QgcNfSy6
>>920
https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_parsing?view=powershell-7.2

PowerShell がコマンド入力を解析すると、コマンドレットまたはネイティブ実行可能ファイルへのコマンド名の解決が試みされます。 コマンド名が完全に一致しない場合、PowerShell は既定の動詞としてコマンドの前 Get- に付加されます。
2022/01/20(木) 15:57:54.33ID:PUohEL+U
PowerShellバカにしてたけど、安定性半端ないわ
適当にササッと書いたやつがなんのエラーもなくずっと正確に動いとる
2022/01/20(木) 16:02:20.23ID:Aa91Vk9H
>>921
ありがとうございます!
このドキュメントが見つからず困っていました
助かりました
2022/01/20(木) 17:34:26.20ID:I7UNJZAr
正直、PowerShellって名前がダサいと思う
925デフォルトの名無しさん
垢版 |
2022/01/20(木) 19:23:46.46ID:qK2oGbTr
チカラこそパワー!
2022/01/20(木) 19:45:12.86ID:N7Uy6cYb
ぱわわしぇる!
927デフォルトの名無しさん
垢版 |
2022/01/20(木) 19:54:27.39ID:INnqrIt/
名前負けしてるなあ、とは思うけど
2022/01/20(木) 20:28:47.30ID:Ibae9TV2
富士通が昔PowerCobolとか出してたからPowerなんちゃらは不安になる
929デフォルトの名無しさん
垢版 |
2022/01/20(木) 20:31:33.85ID:6YV8Mf/D
うちはウルトラCとかいうインタープリターだったなー
2022/01/20(木) 22:25:31.06ID:yvXRNpR1
力貝

宝貝みたいなもんだなきっと
2022/01/20(木) 22:31:19.45ID:ogjAY3PM
>>927
そう?
方向性はともかくshよりだいぶ高機能になってると思う
2022/01/21(金) 14:41:49.71ID:Q8HlpjEI
質問です。

get-childitemのデフォルトのソート順は何でしょうか?(sort-objectを明示しない場合の並び順)

ソート順について記載されているドキュメントの所在でも良いです。
2022/01/21(金) 20:37:48.38ID:QAFbTLmU
>>932
NTFSなら何もしなくてもUNICODEのコード順だかでソートされて出てくる
要するにファイルシステム次第
934デフォルトの名無しさん
垢版 |
2022/01/21(金) 20:45:32.61ID:D6eDuhqM
>>933
さて、どうかな
MicrosoftはSJIS時代のソート順をひきずってると思うぞ
935デフォルトの名無しさん
垢版 |
2022/01/21(金) 22:44:52.31ID:Q8HlpjEI
932です。先ほどの質問についてご回答頂きありがとうございます。予めソートされていることがわかり、安心しました。

追加ですみませんが、もう1点質問をさせてください。(先ほどの質問は、当疑問からの派生でした。)

■前提事項
比較元と比較先でソート順を変えてdiffを取った場合、バイナリによる比較とハッシュ値による比較では結果が異なります。
具体的に申し上げますと、下記ディレクトリ構成の「file1.txt」を異なる内容にした場合、
バイナリ比較では、比較元の「修正前.xlsx」と比較先の「file1.txt」で差分を出力します。(ディレクトリの違いによるアンマッチを出力する。)
ハッシュ値の比較では、比較元の「file1.txt」と比較先の「file1.txt」で差分を出力します。(同ディレクトリ配下のアンマッチを出力する。)

■質問
なぜハッシュ値による比較では、比較元と比較先でソート順が違うのに同ディレクトリの差分のみを出力できるのか。(データ型の違いにヒントがあるのかなと思っていますが、解明まで至っておりません。)

■コード
$master = Get-ChildItem -LiteralPath [比較元ディレクトリ] -Recurse -File | Sort-Object{$_.LastWriteTime}
$work = Get-ChildItem -LiteralPath [比較先ディレクトリ] -Recurse -File | Sort-Object{$_.FullName}

@(Compare-Object (Get-Content -Encoding Byte $master.FullName) (Get-Content -Encoding Byte $work.FullName) -PassThru)

@(Compare-Object -Property Hash (Get-FileHash $master.FullName) (Get-FileHash $work.FullName) -PassThru)

■ディレクトリ構成(比較元と比較先で同一)
dir1
└─dir2
└─dir3
├─PG1
│ file1.txt
│ file2.txt
│ file3.txt

└─PG2
修正前.xlsx
936デフォルトの名無しさん
垢版 |
2022/01/21(金) 22:50:11.95ID:Q8HlpjEI
長文になりすみませんでした。
ディレクトリ構成が崩れてしまいましたが、以下の通りです。
 dir1\dir2\dir3\PG1\file*.txt
 dir1\dir2\dir3\PG2\修正前.xlsx

別の場所で質問すべきということでしたら、その旨をお伝えください。
当スレに相応しくないようでしたら無視頂いて構いません。申し訳ございませんでした。
2022/01/21(金) 22:51:59.59ID:2Ya+eSMz
例えば、ソード結果が異なる、1,2,3 と、3,2,1 を比べれば、2しか一致しない
2022/01/22(土) 18:26:51.31ID:wDrU8P/z
>>917
Ruby で作ってみた

require 'csv'
# ruby ./script.rb ./input.csv (デフォルトは、$stdout)
# ruby ./script.rb ./input.csv > 出力ファイル

# 2列目に、カンマ・改行・シングル/ダブルクォーテーションを入れてみた
csv_text = %(A001,"あ,い\nう'え""お",123) #=> "A001,\"あ,い\nう'え\"\"お\",123"
csv_ary = CSV.parse_line( csv_text ) #=> ["A001", "あ,い\nう'え\"お", "123"]

# 引数は入力ファイル名・input.csv
CSV.filter( File.open( ARGV[ 0 ] ) ) do |row| # 1行ずつ処理する
if row[ 0 ] == csv_ary[ 0 ]
( 0...csv_ary.length ).each do |idx|
row[ idx ] = csv_ary[ idx ] # すべての列を差し替える
end
end
end

入力ファイル・input.csv
A001,,
B,1,2
A001,1,2

出力。A001で始まる、2行が置換された
A001,"あ,い
う'え""お",123
B,1,2
A001,"あ,い
う'え""お",123
2022/01/22(土) 18:35:03.63ID:95Wn62Jb
キチガイが来た
2022/01/22(土) 18:54:41.80ID:MgA+2TRu
キチガイは見えない
2022/01/22(土) 19:21:27.37ID:kAQ/cYNL
目的とやってることがとっちらかってるな
なんで比較するのにLastWriteTimeでソートしてんの
2022/01/26(水) 20:55:59.87ID:wcWyeiko
https://i.imgur.com/uWA4d1c.png
タスクマネージャーから手動で子プロセスだけ終了させることはできるけど
PowerShellでやるには Get-Process -Name explorer のあと
どうやって子プロセスのPIDを取得すればいいでしょうか?教えてください
2022/01/26(水) 22:28:49.77ID:KYTViaCV
>>942
Get-WmiObjectかGet-CimInstance使ったら?
(Get-Process -Name explorer).Id | %{Get-CimInstance Win32_Process -Filter "ParentProcessId=$_"}
>>22 でも出てるよ
2022/01/26(水) 23:22:40.50ID:z4xHZvF2
最近PowerShell使い始めたんだけど
大きなシステムを作るとき、メインと複数のサブルーチンとかも基本1つのファイルで完結させるのか?それともファイルを何個も分けるのか?
どっちだとしても可読性下がる気がする
2022/01/26(水) 23:29:53.21ID:z4xHZvF2
PowerShell ISEでスクリプトウィンドウは何で左側に表示できないんだろ
左側のほうが俺はやりやすいわ
2022/01/26(水) 23:54:26.65ID:BYfIsc0u
>>945
Microsoftはpowershell開発にはvscodeの方がおすすめだと言ってるよ
https://docs.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/vscode/using-vscode?view=powershell-7.2
2022/01/27(木) 02:33:22.29ID:sf3Kg0Os
>>943
ありがとうございます。これで試してみます
2022/01/27(木) 08:04:44.84ID:EosWc+ux
>>944
そもそも大きなシステムをPowerShellでは作らない
2022/01/27(木) 09:23:06.79ID:p8Bx/YYe
>>944
>>948の通りPowerShellで大きなシステムを作る事自体がアンチパターンの極み
どうやっても可読性最悪だし破綻は避けられない
2022/01/27(木) 10:21:25.25ID:tOnT0cfV
powershellで大きめのものを組むならC#で組むときみたいな箱庭を作る発想は完全に捨てて、UNIX的な思考に切り替えるべき
完成度の高い単独で機能するコマンドを作って組み合わせていくようにすることで、ドメインを拡大させない
コマンド同士の細かい相互作用を作り込んではいけない
2022/01/29(土) 09:01:01.42ID:oEiS6XOx
Unix コンポーネント: 小さいことは美徳である
https://web.archive.org/web/20080709051701/http://www.os-omicron.org/~takano/private/trans/bongo-bong_j.html#:~:text=%E3%82%92%E6%8E%A2%E3%81%9B)-,Unix%20%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88,-%3A%20%E5%B0%8F%E3%81%95%E3%81%84%E3%81%93%E3%81%A8%E3%81%AF
2022/01/30(日) 01:37:19.06ID:ZZo5v4fB
>>951
ちょっと読んでみたらIEのCOMベースってすばらしいよね真似しよが結論になってて時代を感じた
さてBonoboはUnix界でうまくいったのでしょうか
https://en.wikipedia.org/wiki/Bonobo_(GNOME)
2022/02/02(水) 01:43:07.06ID:eLtuTeT2
Get-Contentで取得したテキストファイルが
処理終わっても自分自身で開いていることが多い
別の処理で終わったこのテキストファイルを削除しようとすると
自分で開いているので削除出来ないでエラーが出る

処理が終わっても閉じない原因か対処法はないでしょうか
954デフォルトの名無しさん
垢版 |
2022/02/02(水) 02:18:48.08ID:DC2596zT
>>953
明示的にオブジェクトを破棄する。
2022/02/02(水) 07:51:22.34ID:eLtuTeT2
>>954
なるほど破棄すると繋がりが消えるのか
ありがとうございます
2022/02/02(水) 23:39:08.14ID:eLtuTeT2
すみません、オブジェクト破棄を以下のように解釈していたのですが
そうなるとRemobe-Itemでファイルを削除するとき、変数に入れずにフルパスで指定するのか?と思ったけどやっぱり違うと思うし
改めて変数に入れるのも多分違うと思い、すっきりしない状態です。
多分破棄するの意味を間違って、こちらが解釈してると思うのですが、この場合どう書いてますでしょうか?

$lines = (Get-content $FilePath-as [string[]]

Remove-Variable FilePath

Remobe-Item $FilePath
2022/02/03(木) 07:21:37.66ID:OMU2Br15
remove variableであってるとおもう。
GCに回収させるとより安全。
$nullを代入でもいけるかな
2022/02/03(木) 07:41:16.46ID:OMU2Br15
ん?ファイル開いているのはlinesじゃないか?
linesを破棄しよう
2022/02/03(木) 16:23:23.37ID:VbK4RRek
gcでファイル開きっぱなしなんてないと思うけど
削除できないってパターンはありそうだな
削除できるまで無限ループでいいんじゃね
2022/02/03(木) 20:01:53.14ID:gI5tR0VQ
Get-content終わってもファイル開きっぱなしなんてあるの?
物凄いデカいファイルだったらあり得るのか?
961デフォルトの名無しさん
垢版 |
2022/02/03(木) 23:08:22.41ID:mIHwLL5k
Get-content(cat)はcat.exeと違うバッファリング方法だからユーザーから見れば開きっぱなしに感じる場合もあるかも
962デフォルトの名無しさん
垢版 |
2022/02/06(日) 00:04:34.70ID:D4g/hsrG
同じ変数を使い回すのにこだわっている阿呆だな
2022/02/06(日) 01:29:48.39ID:2aKrrA/x
      ___   ━┓  ___    ━┓
     / ―  \  ┏┛/ ―\   ┏┛
    /  (●)  \ヽ ・. /ノ  (●)\  ・
  /   (⌒  (●) /. | (●)   ⌒)\
  /      ̄ヽ__) /   |   (__ノ ̄  |
/´     ___/     \        /
|        \          \     _ノ
|        |          /´     `\
--------------------------------------
 このスレはあなたにとって役にたちましたか?

  ○ とても役にたった
  ○ 役にたった
  ○ どちらともいえない
  ○ 役にたたなかった
  ● 全く役にたたなかった
2022/02/06(日) 14:34:16.42ID:m5li3VVD
そもそもファイルを削除できなかったことが無い
2022/02/07(月) 07:35:36.67ID:83JX6KKe
削除できないのは他の要因で起こり得るから何とも
2022/02/09(水) 12:21:56.14ID:3KsDo8lO
gcに-waitとか-tailとか付けると開きっぱなしになるけど、明示的に離せってスイッチは無かったっけ?
付けなけりゃ閉じてるものかと思ってた
2022/02/09(水) 23:40:08.91ID:WBXgVt22
WindowsFormを使いGUIを作ろうと思っていますがtextboxのイベントハンドラが理解できていません
VBAでいうAfterUpdateをやろうと思っているのですが、
textbox1のフォーカスが別に移ったらlabel1にテストと表記したいのですが
そういった処理は可能でしたら下のどこを直せばいいのでしょうか?

Add-Type -AssemblyName system.windows.forms
Add-Type -AssemblyName system.drawing

$form = New-Object System.Windows.Forms.Form

$textbox1 = [System.Windows.Forms.textbox]@{
location = New-Object System.Drawing.point(10,10)
size = New-Object system.drawing.size(100,100)
}

$label1 = [System.Windows.Forms.Label]@{
location = New-Object System.Drawing.point(10,30)
size = New-Object system.drawing.size(250,20)
}

$form.Controls.Add($label1)
$form.Controls.Add($textbox1)

$textbox1.leave
({
$label1.text = "テスト"
})

$result = $form.ShowDialog()
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()
2022/02/11(金) 00:44:40.14ID:xWKZ1gm4
>>968
教えていただきありがとうございます。
テキストボックスだけだと移動が確認できないなど知らなかったのでとても助かりました。
970デフォルトの名無しさん
垢版 |
2022/02/12(土) 03:20:20.24ID:NDMck+ft
ネタだろ
2022/02/12(土) 16:09:12.24ID:8ted8XK+
入力コントロールがフォーカスを失ったという、イベントは無いの?
2022/02/12(土) 21:15:19.39ID:JXSQUy8V
Control.Leave イベント
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.leave
973デフォルトの名無しさん
垢版 |
2022/02/13(日) 17:33:00.74ID:zeKJdxT+
よろしくお願いします。
現在開いているexcelのアクティブブックを捕まる方法ないでしょうか??
例えば、アクティブブックのアクティブシートにのってるグラフの軸を全て変更したい時に、
excelからpowershell ISEに画面を変えて操作したいのです。
2022/02/13(日) 17:40:39.22ID:0qwas07F
>>973
Pythonおすすめ
975デフォルトの名無しさん
垢版 |
2022/02/13(日) 17:44:20.75ID:zeKJdxT+
>974
ありがとうございます。
xlwingsだとアクティブブックつかめるけど、グラフの細かな設定がない
openpyxlだとアクティブブックをつかめなさそう、
でpowershellでできないかな、と。
2022/02/13(日) 17:47:29.32ID:0qwas07F
>>975
グラフもPythonで描けばいい
2022/02/13(日) 17:55:51.10ID:lPImUKwL
pandasに無いような高等な統計関数が必要でないかぎりpythonで完結したほうが楽なんじゃね
978デフォルトの名無しさん
垢版 |
2022/02/13(日) 18:02:06.97ID:zeKJdxT+
ありがとうございます。
まぁ、会社でみながexcel使ってるので、、こんな質問をしている次第です、、
2022/02/13(日) 18:06:52.02ID:PEAS4D91
シートの名前やらインデックスがpwshでわかれば、その情報をpythonに渡してmatplotlibでtemp.jpgとかで吐き出したグラフをまたpwshで貼れば行ける気がする
2022/02/13(日) 18:34:35.90ID:Z5jSGqeY
ActiveWorkBookプロパティで捕まえられるでしょ
VBAから呼んでもPowershellから呼んでもPythonから呼んでもいい
2022/02/13(日) 18:37:17.22ID:LaQ04ZoE
次スレほい
PowerShell -Part 6
https://mevius.5ch.net/test/read.cgi/tech/1644744972/
2022/02/13(日) 18:41:38.57ID:LaQ04ZoE
余計なお世話ついでに
ISEはもう終わったプロジェクトなので
後継のVSCode+Powershellプラグインに乗り換えるのがオススメ
983デフォルトの名無しさん
垢版 |
2022/02/13(日) 20:32:19.65ID:zeKJdxT+
色々アドバイスありがとうございました。

それもそだな、と下記でいけました。お騒がせいたしました

$Excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")

$Excel.ActiveWorkbook.ActiveSheet.name
2022/02/21(月) 13:09:23.89ID:jIppNsU3
教えて下さい
powershellで再帰処理をしたいんですが、

"The script failed due to call depth overflow"

と言うエラーで最後まで処理してくれません。
再帰回数のスタックオーバーフローで
トランポリン処理が有効とまでは調べたのですが
上手く理解出来ず

↓↓
https://qiita.com/yumura_s/items/8a44a70e3e11c4eb1464

詳しい方、よろしくお願いします
2022/02/21(月) 13:24:10.95ID:Vv5lB4cH
そのメッセージの言わんとするところは、すげー効率悪いので再帰で書くな
というアドバイスです
2022/02/21(月) 13:39:08.84ID:jIppNsU3
対象データが階層構造になっていて、
網羅的に処理したいんですが、うーん
2022/02/21(月) 14:08:41.32ID:Vv5lB4cH
500階層あるデータ構造はさすがに扱ったことがない…
そもそも特定の枝が底なし沼なのだとしたら、それでも延々と潜り続ける、というのは本当に意図した挙動なのか?

底なし沼が時々存在して、それに興味が無いのならば素直な余再帰で書ける幅優先探索を勧める

深さ優先で頑張りたいなら、スタックとしてコールスタックを流用するのでなくて、明示的にスタックにpush/popすると少しは経済的
特定の深さに達したら諦める決め打ちもあり

トランポリンで遅延評価を積む利点は、入力データ構造を処理するというより、需要に応じて任意の深さのデータを出力できるという点にあるので、悪手かと
2022/02/21(月) 14:17:30.40ID:+uSXi1Gh
トランポリン?のやってることはSchemeで言うCPS相当だね。まずCPSを理解しないと何が起きてるのか判らないと思う。
であるならば理屈ではトランポリンなんて変な事しなくてもスクリプトブロックをクロージャにするやつだけで再帰をクロージャの連鎖呼び出しに置き換えることはできると思う。
2022/02/21(月) 14:38:31.70ID:Vv5lB4cH
(実装は暗黙のCPSかもしれないけど) schemeだとdelay/forceそのまんまじゃね

イテレータとかストリームとか色んな言い方があるけど、何にせよ処理すべきデータがまだ存在していないような時にのみ有効
もし処理対象のデータが既に存在しているのなら、単に無駄な計算を増やすだけだよ
2022/02/21(月) 14:43:51.48ID:+uSXi1Gh
再帰処理したいつってる本人が理解できないと意味ないからな
再帰が軽い言語で処理すりゃいいんじゃねーの
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
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況