[過去ログ]
PowerShell -Part 5 (1002レス)
PowerShell -Part 5 http://mevius.5ch.net/test/read.cgi/tech/1615994992/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
1: デフォルトの名無しさん [sage] 2021/03/18(木) 00:29:52 ID:/MpReTiX 前スレ PowerShell -Part 4 https://mevius.5ch.net/test/read.cgi/tech/1577862511/ 次スレは>>980が立ててね!! http://mevius.5ch.net/test/read.cgi/tech/1615994992/1
876: デフォルトの名無しさん [sage] 2021/12/16(木) 21:09:01 ID:VSm+B60n >>871 > is not a raw-bytes conduit to a file in PowerShell, unlike in cmd.exe. Instead, PowerShell always decodes output from external programs (into .NET strings) before further processing (but not when printing directly to the display), based on the character encoding stored in [Console]::OutputEncoding. Therefore, before your external-program call, you must (at least temporarily) set [Console]::OutputEncoding to match the actual character encoding used in your external program's output; e.g., [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new() http://mevius.5ch.net/test/read.cgi/tech/1615994992/876
877: デフォルトの名無しさん [] 2021/12/16(木) 21:15:42 ID:V72yjyE9 従来型のパイプラインを選べない時点で設計思想がおかしいんですよ $(xxx) みたいな特殊表現によるパイプが提供されてしかるべき というかPowerShellのパイプラインを特殊表現に閉じ込めるべき http://mevius.5ch.net/test/read.cgi/tech/1615994992/877
878: デフォルトの名無しさん [] 2021/12/16(木) 21:56:24 ID:V72yjyE9 OutputEncodingとコードページがごっちゃになってるのもよくない OutputEncodingをUTF8に指定したら、cmd /? で英語ヘルプが返されるようになってしまう この挙動は、コマンドプロンプト上のchcp コマンドでコードページを変えたときのcmd /?の挙動と同じ http://mevius.5ch.net/test/read.cgi/tech/1615994992/878
879: デフォルトの名無しさん [sage] 2021/12/16(木) 22:23:10 ID:ywwvfrpp >>877 そもそも従来型のパイプラインは生バイト晒してたように聞こえるんだが、テキストモード(ascii)IOを忘れてないか fopen等システムコールに行儀良く"b"フラグ渡してれば問題はないが、そうでない時にcmdはtypeや |を処理する際にコンソールのファント設定見に行く等奇怪な挙動をしてた でもたまに制御文字をtypeして死んだり… テキストモードを排除できれば可能かも http://mevius.5ch.net/test/read.cgi/tech/1615994992/879
880: デフォルトの名無しさん [sage] 2021/12/16(木) 22:31:55 ID:ywwvfrpp gnuとかのプログラムは今でもioモード切り替えフラグ付いてたりするね 生バイトが欲しければProcessInfoとかからstdin/stdout引っこ抜いてIO.BinaryWriterに渡すとか http://mevius.5ch.net/test/read.cgi/tech/1615994992/880
881: デフォルトの名無しさん [sage] 2021/12/16(木) 22:47:57 ID:peIHdemY 文字列中に紛れたeof文字相当のバイトを見ても読み込みを続ける挙動は多分windows的には正しくないよな そんな文字無くしてしまえ、と思うけど http://mevius.5ch.net/test/read.cgi/tech/1615994992/881
882: デフォルトの名無しさん [] 2021/12/17(金) 06:27:47 ID:cFRRrt8D wsl --helpのみっともない改行はUTF-16のL"\r\n"をテキストモードで出力するwslの変態行為がそもそもの原因だし https://docs.microsoft.com/en-us/cpp/c-runtime-library/unicode-stream-i-o-in-text-and-binary-modes?view=msvc-170 http://mevius.5ch.net/test/read.cgi/tech/1615994992/882
883: デフォルトの名無しさん [] 2021/12/17(金) 06:36:45 ID:cFRRrt8D PowerShell固有のパイプラインに、|, >, >> を使うのをやめて 例えば $|, $>, $>> のような特殊表現に閉じ込めてほしいんだが 今さら無理か http://mevius.5ch.net/test/read.cgi/tech/1615994992/883
884: デフォルトの名無しさん [] 2021/12/17(金) 07:27:36 ID:cFRRrt8D 昔、MINGWのcatコマンドが0x0aを勝手に0x0d,0x0aへテキストモード変換する迷惑行為で人知れず苦しんだ人は多かったと思う http://mevius.5ch.net/test/read.cgi/tech/1615994992/884
885: デフォルトの名無しさん [sage] 2021/12/17(金) 08:47:10 ID:+hqMWYwb c標準ライブラリの"t"フラグはホスト側でよしなに変換してくれという表明だけど、たぶん行論理セパレータ\n↔\r\n変換してくれるやつくらいに考えてる人が多いんじゃねえかな http://mevius.5ch.net/test/read.cgi/tech/1615994992/885
886: デフォルトの名無しさん [sage] 2021/12/17(金) 09:02:49 ID:z0PRPnA0 "t"はc規格には無いか、無指定の"w"フラグ等がテキストモードにデフォルトするというだけで cっぽいopen関数備えてる言語(pythonとか)だと"b"との区別を意識させる為に"wt"とか受け付けるけど http://mevius.5ch.net/test/read.cgi/tech/1615994992/886
887: デフォルトの名無しさん [sage] 2021/12/17(金) 09:38:27 ID:cFRRrt8D マイクロソフト謹製アプリが率先してやらかしてるってところが肝 http://mevius.5ch.net/test/read.cgi/tech/1615994992/887
888: デフォルトの名無しさん [sage] 2021/12/17(金) 10:04:59 ID:YK+z10uu それと直接関係あるかは再現しないのでちょっと不明 >>871はconhostをsjisに設定してない? http://mevius.5ch.net/test/read.cgi/tech/1615994992/888
889: デフォルトの名無しさん [sage] 2021/12/17(金) 10:07:35 ID:YK+z10uu v7.2/wt(preview) [console]のioデフォルトはutf8(=旧nobom)になってた http://mevius.5ch.net/test/read.cgi/tech/1615994992/889
890: デフォルトの名無しさん [] 2021/12/17(金) 10:09:02 ID:cFRRrt8D >>888 CP932は日本語OSの規定の設定だよ 再現しないとか何言ってるのかわからない 作られたファイルaaa.txtの文字コードの確認さえできないんなら回答しなくていいよ http://mevius.5ch.net/test/read.cgi/tech/1615994992/890
891: デフォルトの名無しさん [sage] 2021/12/17(金) 10:14:30 ID:YK+z10uu >>890 原因分かってんのなら変えなよ… win10パッケージ版(us_en)に日本語パック追加で入れるとデフォルトはこうなると思う http://mevius.5ch.net/test/read.cgi/tech/1615994992/891
892: デフォルトの名無しさん [sage] 2021/12/17(金) 10:27:09 ID:YK+z10uu あとwin11非対応マシンでms配布のロールバック用iso(非ローカライズ版)イメージで再インストール→日本語パック選択した人も該当するはず oem版はsjisが多いと思う http://mevius.5ch.net/test/read.cgi/tech/1615994992/892
893: デフォルトの名無しさん [] 2021/12/17(金) 10:32:50 ID:cFRRrt8D >>891 Windows Terminalでも起きるんだからconhost.exeは関係ないぞ http://mevius.5ch.net/test/read.cgi/tech/1615994992/893
894: デフォルトの名無しさん [sage] 2021/12/17(金) 10:42:00 ID:YK+z10uu >>893 conhostも[console]もシステムのcpから拾ってくる wtに関してはsetting.jsonからも設定できる 様々なエンコーディング切り替えられないソフトが混在してて、グローバルに切り替えるのがためらわれるならば ps/cmd>ms-settings:~(スタート>歯車のやつ)からアプリ毎にエンコーディング設定するのがおすすめ http://mevius.5ch.net/test/read.cgi/tech/1615994992/894
895: デフォルトの名無しさん [] 2021/12/17(金) 10:56:53 ID:cFRRrt8D エンコーディング機能にAutoDetectがあれば良いだけなんだがな 簡単なことを難しくしてしまうのは無能の証なんだよ PowerShellみててつくづくそう思う http://mevius.5ch.net/test/read.cgi/tech/1615994992/895
896: デフォルトの名無しさん [sage] 2021/12/17(金) 11:26:52 ID:aYaid5rJ オートディテクトはギルティ、頭抱える事になるぞ 素性の良いデータで大体動けばいいような自動化なら、古き良きnkfでも噛ませ ポータブルにしたいならPSGalleryに純pwsh実装のモジュールが転がってる、クオリティは知らん i/oエンコーディングをシェルレベルで扱えるのはバベルの塔なwindows環境では重宝する http://mevius.5ch.net/test/read.cgi/tech/1615994992/896
897: デフォルトの名無しさん [] 2021/12/17(金) 11:27:13 ID:cFRRrt8D PowerShellのパイプラインそれ自体がすでに低速なのに文字コードの自動判定すらないとか無能すぎでしょ http://mevius.5ch.net/test/read.cgi/tech/1615994992/897
898: デフォルトの名無しさん [] 2021/12/17(金) 11:29:06 ID:cFRRrt8D >>896 古き良きnkfを噛ませられないからもめてるですよ パイプでnkfに入力された時点で汚染されてるから 時すでにお寿司なのがPowerShell http://mevius.5ch.net/test/read.cgi/tech/1615994992/898
899: デフォルトの名無しさん [sage] 2021/12/17(金) 12:26:32 ID:YK+z10uu リダイレクトの挙動が不自然に感じるのは、ホストの概念で躓いてるのでは ホストはコンソールとも限らないし、coreバンドルのコンソールホスト以外にもiseやらaspやら色々あるわけで なんで設定が分かれてるのか考えるべき http://mevius.5ch.net/test/read.cgi/tech/1615994992/899
900: デフォルトの名無しさん [] 2021/12/17(金) 12:35:31 ID:cFRRrt8D >>899 別にいろんなホストがあってもいいんだよ 昔ながらの標準入出力と棲み分けして提供すべきだったってこと だけど、十把一絡げにしたせいで昔ながらのパイプ処理まで低速になってしまった http://mevius.5ch.net/test/read.cgi/tech/1615994992/900
901: デフォルトの名無しさん [sage] 2021/12/17(金) 12:48:55 ID:BQzVpcl1 >>900 >>856からrelatedで飛べる https://github.com/PowerShell/PowerShell/issues/1908 で提案されてるような構文はあったら確かに便利かと思う もちろんcoreの設計とは相容れないから、追加モジュールかwindows pwsh(新)でリリースすることになると思うけど イイね押しとこう http://mevius.5ch.net/test/read.cgi/tech/1615994992/901
902: デフォルトの名無しさん [] 2021/12/17(金) 13:16:49 ID:cFRRrt8D むしろPowerShelll固有の構文を新しい構文に移行させてほしいくらいだわ パイプラインにテキスト縛りがある時点でPowerShellは欠陥品なんだよ http://mevius.5ch.net/test/read.cgi/tech/1615994992/902
903: デフォルトの名無しさん [] 2021/12/29(水) 20:28:55 ID:/Pws6ORw PowerShellは以下コマンドをFunction化できない。 [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(932); $OutputEncoding = [Text.Encoding]::GetEncoding(932); Function内でしかスコープが有効でないことが原因。$global:OutputEncodingを変えてもダメ。 なのでchcpコマンド相当のことをやろうとしたら手入力するしかない なんというか、PowerShellは他のシェル言語でできいることができない残念なシェル言語。 オワコン化待ったなし http://mevius.5ch.net/test/read.cgi/tech/1615994992/903
904: デフォルトの名無しさん [] 2021/12/29(水) 20:49:49 ID:/Pws6ORw ([console])::OutputEncodingをFunction外にも適用できないことにはchcp相当の機能は実現できない Powershellからchcpを呼ぶとcmdシェルを介してコマンドプロンプトの初期値が表示されるだけであり、グローバル設定とは無関係 ([console])::OutputEncodingが効いたかどうかは、cmd /? で戻されるヘルプ文字列が日本語かどうかで判断できる http://mevius.5ch.net/test/read.cgi/tech/1615994992/904
905: デフォルトの名無しさん [sage] 2021/12/29(水) 20:57:34 ID:7YDJokPl UNIXシェルは糞of糞 やっぱりPowerShellだよな シェルスクリプトは文字通りの逐次実行 sleepy-yoshi.hatenablog.com/entry/20090917/p1 http://mevius.5ch.net/test/read.cgi/tech/1615994992/905
906: デフォルトの名無しさん [sage] 2021/12/29(水) 23:03:59 ID:wj529v9h >>903-904 ドットソースで実行してもだめなの? function f1 {〜} . f1 http://mevius.5ch.net/test/read.cgi/tech/1615994992/906
907: デフォルトの名無しさん [] 2021/12/29(水) 23:16:02 ID:/Pws6ORw >>906 説明不足だった やりたいことはコマンド入力じゃなくてSet-PSReadLineKeyHandler -Keyを使ったキーバインドなんだけど ドット. で反映してくてもScriptBlockやFunctionのスコープに閉じ込められてしまうから解決にならない http://mevius.5ch.net/test/read.cgi/tech/1615994992/907
908: デフォルトの名無しさん [] 2021/12/29(水) 23:39:26 ID:/Pws6ORw ま、そういうエンコーディング切り替え機能をどれだけ充実させても既存のbashやCMDのようなプロセス間通信はできないのでやるだけ無駄ってのはわかってる http://mevius.5ch.net/test/read.cgi/tech/1615994992/908
909: デフォルトの名無しさん [sage] 2021/12/30(木) 08:42:29 ID:InFuAQoQ PowerShellでバイナリ(もしくはエンコーディングが不明なデータ)を扱う https://qiita.com/boukichi_numloc/items/0f4bb4e73f71c2f0a519 http://mevius.5ch.net/test/read.cgi/tech/1615994992/909
910: デフォルトの名無しさん [sage] 2021/12/30(木) 21:35:12 ID:FEP7eJXA powershell内部でcmd呼んだらいいのでは 何がしたいのかわからんけど http://mevius.5ch.net/test/read.cgi/tech/1615994992/910
911: デフォルトの名無しさん [sage] 2021/12/30(木) 23:22:49 ID:pA3aK4qE PowerShellからcmd を呼んだら負け、みたいな抵抗感が少しある http://mevius.5ch.net/test/read.cgi/tech/1615994992/911
912: デフォルトの名無しさん [sage] 2021/12/31(金) 19:53:42 ID:YcD3GAD3 残念な仕様はあれども、ちゃんと書けば、ちゃんと動く クソとは思わんな。便利は便利よ http://mevius.5ch.net/test/read.cgi/tech/1615994992/912
913: デフォルトの名無しさん [sage] 2022/01/11(火) 22:54:51 ID:rTZaFBoT CSVを項目で検索し、ヒットした列を編集したいんだけど、パイプが理解しきれてないせいで上手いこといかない $ArrCsvData | Where-Object{$_.CodeNo -match $Code} | このあとにカンマ区切りのテキストファイルを該当列に上書きしたいんだけど、どうすればいいのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1615994992/913
914: デフォルトの名無しさん [sage] 2022/01/11(火) 23:45:14 ID:1S8cvNBi >>913 まず、ArrCsvDataはCSVからオブジェクトに変換(ConverFrom-CSVやImport-CSV)した物なのかな じゃないとプロパティで値を呼び出せないよ 「カンマ区切りのテキストファイルを該当列に上書きしたい」の意味が測り兼ねるけど、 条件に合致する行を編集したいなら $ArrCsvData | ForEach-Object{ if($_.CodeNo -match $Code){$_.編集したい列名 = "編集後の文字列";$_ } とやる。コツは編集後に「;$_ 」とやって出力する所。じゃないと編集だけして破棄する事になる。 さらにCSVで保存したいなら 〜 | Export-Csv -PSPath "保存先パス" http://mevius.5ch.net/test/read.cgi/tech/1615994992/914
915: デフォルトの名無しさん [sage] 2022/01/11(火) 23:46:35 ID:1S8cvNBi ミス if文の閉じカッコ忘れてた $ArrCsvData | ForEach-Object{ if($_.CodeNo -match $Code){$_.編集したい列名 = "編集後の文字列";$_ } ↓ $ArrCsvData | ForEach-Object{ if($_.CodeNo -match $Code){$_.編集したい列名 = "編集後の文字列"} ; $_ } http://mevius.5ch.net/test/read.cgi/tech/1615994992/915
916: デフォルトの名無しさん [sage] 2022/01/12(水) 00:21:17 ID:B+xDwNUa いちいち空行挿むなスカスカ脳 http://mevius.5ch.net/test/read.cgi/tech/1615994992/916
917: デフォルトの名無しさん [sage] 2022/01/12(水) 01:11:14 ID:0oGT7bUk >>915 教えていただきありがとうございます CSVは 「A001,,」 「B001,かきくけこ,12345」 のようなフィールドで $Code = "A001"を検索し 「A001,あいうえお,12345」 のような内部のテキストファイルがあり、編集したい列名を指定せずにまとめて編集したいと思っています。 実際には編集する項目が多くループさせながら格納だと長くなってしまうため、省略できないかと思い相談させていただきました。 http://mevius.5ch.net/test/read.cgi/tech/1615994992/917
918: デフォルトの名無しさん [sage] 2022/01/12(水) 21:13:44 ID:vTY0CDWm gc $csv_in -Encoding Default | %{ $fields = $_ -split ","; if ($fields[0] -match $Code) { $fieldsを加工; $fields -join "," } else { $_ } } | Out-File $csv_out -Encoding Default http://mevius.5ch.net/test/read.cgi/tech/1615994992/918
919: デフォルトの名無しさん [sage] 2022/01/13(木) 01:49:18 ID:sU2jW0+6 >>918 ありがとうございます まだ理解できていないところもありますので勉強しながら試させていただきます http://mevius.5ch.net/test/read.cgi/tech/1615994992/919
920: デフォルトの名無しさん [sage] 2022/01/18(火) 20:28:41 ID:4KOVvciD get-aliasをalias、またはget-serviceをservice、 自作の関数でもget-testとしたらtest、のように エイリアス定義無しでも get-を省略して実行出来てしまう(または、省略したらget-*扱いになる)のですが これについて記載されたドキュメントが何処にあるか 教えて頂けないでしょうか http://mevius.5ch.net/test/read.cgi/tech/1615994992/920
921: デフォルトの名無しさん [] 2022/01/19(水) 20:37:21 ID:QgcNfSy6 >>920 https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_parsing?view=powershell-7.2 PowerShell がコマンド入力を解析すると、コマンドレットまたはネイティブ実行可能ファイルへのコマンド名の解決が試みされます。 コマンド名が完全に一致しない場合、PowerShell は既定の動詞としてコマンドの前 Get- に付加されます。 http://mevius.5ch.net/test/read.cgi/tech/1615994992/921
922: デフォルトの名無しさん [sage] 2022/01/20(木) 15:57:54 ID:PUohEL+U PowerShellバカにしてたけど、安定性半端ないわ 適当にササッと書いたやつがなんのエラーもなくずっと正確に動いとる http://mevius.5ch.net/test/read.cgi/tech/1615994992/922
923: デフォルトの名無しさん [sage] 2022/01/20(木) 16:02:20 ID:Aa91Vk9H >>921 ありがとうございます! このドキュメントが見つからず困っていました 助かりました http://mevius.5ch.net/test/read.cgi/tech/1615994992/923
924: デフォルトの名無しさん [sage] 2022/01/20(木) 17:34:26 ID:I7UNJZAr 正直、PowerShellって名前がダサいと思う http://mevius.5ch.net/test/read.cgi/tech/1615994992/924
925: デフォルトの名無しさん [] 2022/01/20(木) 19:23:46 ID:qK2oGbTr チカラこそパワー! http://mevius.5ch.net/test/read.cgi/tech/1615994992/925
926: デフォルトの名無しさん [sage] 2022/01/20(木) 19:45:12 ID:N7Uy6cYb ぱわわしぇる! http://mevius.5ch.net/test/read.cgi/tech/1615994992/926
927: デフォルトの名無しさん [] 2022/01/20(木) 19:54:27 ID:INnqrIt/ 名前負けしてるなあ、とは思うけど http://mevius.5ch.net/test/read.cgi/tech/1615994992/927
928: デフォルトの名無しさん [sage] 2022/01/20(木) 20:28:47 ID:Ibae9TV2 富士通が昔PowerCobolとか出してたからPowerなんちゃらは不安になる http://mevius.5ch.net/test/read.cgi/tech/1615994992/928
929: デフォルトの名無しさん [] 2022/01/20(木) 20:31:33 ID:6YV8Mf/D うちはウルトラCとかいうインタープリターだったなー http://mevius.5ch.net/test/read.cgi/tech/1615994992/929
930: デフォルトの名無しさん [sage] 2022/01/20(木) 22:25:31 ID:yvXRNpR1 力貝 宝貝みたいなもんだなきっと http://mevius.5ch.net/test/read.cgi/tech/1615994992/930
931: デフォルトの名無しさん [sage] 2022/01/20(木) 22:31:19 ID:ogjAY3PM >>927 そう? 方向性はともかくshよりだいぶ高機能になってると思う http://mevius.5ch.net/test/read.cgi/tech/1615994992/931
932: デフォルトの名無しさん [sage] 2022/01/21(金) 14:41:49 ID:Q8HlpjEI 質問です。 get-childitemのデフォルトのソート順は何でしょうか?(sort-objectを明示しない場合の並び順) ソート順について記載されているドキュメントの所在でも良いです。 http://mevius.5ch.net/test/read.cgi/tech/1615994992/932
933: デフォルトの名無しさん [sage] 2022/01/21(金) 20:37:48 ID:QAFbTLmU >>932 NTFSなら何もしなくてもUNICODEのコード順だかでソートされて出てくる 要するにファイルシステム次第 http://mevius.5ch.net/test/read.cgi/tech/1615994992/933
934: デフォルトの名無しさん [] 2022/01/21(金) 20:45:32 ID:D6eDuhqM >>933 さて、どうかな MicrosoftはSJIS時代のソート順をひきずってると思うぞ http://mevius.5ch.net/test/read.cgi/tech/1615994992/934
935: デフォルトの名無しさん [] 2022/01/21(金) 22:44:52 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1615994992/935
936: デフォルトの名無しさん [] 2022/01/21(金) 22:50:11 ID:Q8HlpjEI 長文になりすみませんでした。 ディレクトリ構成が崩れてしまいましたが、以下の通りです。 dir1\dir2\dir3\PG1\file*.txt dir1\dir2\dir3\PG2\修正前.xlsx 別の場所で質問すべきということでしたら、その旨をお伝えください。 当スレに相応しくないようでしたら無視頂いて構いません。申し訳ございませんでした。 http://mevius.5ch.net/test/read.cgi/tech/1615994992/936
937: デフォルトの名無しさん [sage] 2022/01/21(金) 22:51:59 ID:2Ya+eSMz 例えば、ソード結果が異なる、1,2,3 と、3,2,1 を比べれば、2しか一致しない http://mevius.5ch.net/test/read.cgi/tech/1615994992/937
938: デフォルトの名無しさん [sage] 2022/01/22(土) 18:26:51 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1615994992/938
939: デフォルトの名無しさん [sage] 2022/01/22(土) 18:35:03 ID:95Wn62Jb キチガイが来た http://mevius.5ch.net/test/read.cgi/tech/1615994992/939
940: デフォルトの名無しさん [sage] 2022/01/22(土) 18:54:41 ID:MgA+2TRu キチガイは見えない http://mevius.5ch.net/test/read.cgi/tech/1615994992/940
941: デフォルトの名無しさん [sage] 2022/01/22(土) 19:21:27 ID:kAQ/cYNL 目的とやってることがとっちらかってるな なんで比較するのにLastWriteTimeでソートしてんの http://mevius.5ch.net/test/read.cgi/tech/1615994992/941
942: デフォルトの名無しさん [sage] 2022/01/26(水) 20:55:59 ID:wcWyeiko https://i.imgur.com/uWA4d1c.png タスクマネージャーから手動で子プロセスだけ終了させることはできるけど PowerShellでやるには Get-Process -Name explorer のあと どうやって子プロセスのPIDを取得すればいいでしょうか?教えてください http://mevius.5ch.net/test/read.cgi/tech/1615994992/942
943: デフォルトの名無しさん [sage] 2022/01/26(水) 22:28:49 ID:KYTViaCV >>942 Get-WmiObjectかGet-CimInstance使ったら? (Get-Process -Name explorer).Id | %{Get-CimInstance Win32_Process -Filter "ParentProcessId=$_"} >>22 でも出てるよ http://mevius.5ch.net/test/read.cgi/tech/1615994992/943
944: デフォルトの名無しさん [sage] 2022/01/26(水) 23:22:40 ID:z4xHZvF2 最近PowerShell使い始めたんだけど 大きなシステムを作るとき、メインと複数のサブルーチンとかも基本1つのファイルで完結させるのか?それともファイルを何個も分けるのか? どっちだとしても可読性下がる気がする http://mevius.5ch.net/test/read.cgi/tech/1615994992/944
945: デフォルトの名無しさん [sage] 2022/01/26(水) 23:29:53 ID:z4xHZvF2 PowerShell ISEでスクリプトウィンドウは何で左側に表示できないんだろ 左側のほうが俺はやりやすいわ http://mevius.5ch.net/test/read.cgi/tech/1615994992/945
946: デフォルトの名無しさん [sage] 2022/01/26(水) 23:54:26 ID:BYfIsc0u >>945 Microsoftはpowershell開発にはvscodeの方がおすすめだと言ってるよ https://docs.microsoft.com/ja-jp/powershell/scripting/dev-cross-plat/vscode/using-vscode?view=powershell-7.2 http://mevius.5ch.net/test/read.cgi/tech/1615994992/946
947: デフォルトの名無しさん [sage] 2022/01/27(木) 02:33:22 ID:sf3Kg0Os >>943 ありがとうございます。これで試してみます http://mevius.5ch.net/test/read.cgi/tech/1615994992/947
948: デフォルトの名無しさん [sage] 2022/01/27(木) 08:04:44 ID:EosWc+ux >>944 そもそも大きなシステムをPowerShellでは作らない http://mevius.5ch.net/test/read.cgi/tech/1615994992/948
949: デフォルトの名無しさん [sage] 2022/01/27(木) 09:23:06 ID:p8Bx/YYe >>944 >>948の通りPowerShellで大きなシステムを作る事自体がアンチパターンの極み どうやっても可読性最悪だし破綻は避けられない http://mevius.5ch.net/test/read.cgi/tech/1615994992/949
950: デフォルトの名無しさん [sage] 2022/01/27(木) 10:21:25 ID:tOnT0cfV powershellで大きめのものを組むならC#で組むときみたいな箱庭を作る発想は完全に捨てて、UNIX的な思考に切り替えるべき 完成度の高い単独で機能するコマンドを作って組み合わせていくようにすることで、ドメインを拡大させない コマンド同士の細かい相互作用を作り込んではいけない http://mevius.5ch.net/test/read.cgi/tech/1615994992/950
951: デフォルトの名無しさん [sage] 2022/01/29(土) 09:01:01 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1615994992/951
952: デフォルトの名無しさん [sage] 2022/01/30(日) 01:37:19 ID:ZZo5v4fB >>951 ちょっと読んでみたらIEのCOMベースってすばらしいよね真似しよが結論になってて時代を感じた さてBonoboはUnix界でうまくいったのでしょうか https://en.wikipedia.org/wiki/Bonobo_(GNOME) http://mevius.5ch.net/test/read.cgi/tech/1615994992/952
953: デフォルトの名無しさん [sage] 2022/02/02(水) 01:43:07 ID:eLtuTeT2 Get-Contentで取得したテキストファイルが 処理終わっても自分自身で開いていることが多い 別の処理で終わったこのテキストファイルを削除しようとすると 自分で開いているので削除出来ないでエラーが出る 処理が終わっても閉じない原因か対処法はないでしょうか http://mevius.5ch.net/test/read.cgi/tech/1615994992/953
954: デフォルトの名無しさん [] 2022/02/02(水) 02:18:48 ID:DC2596zT >>953 明示的にオブジェクトを破棄する。 http://mevius.5ch.net/test/read.cgi/tech/1615994992/954
955: デフォルトの名無しさん [sage] 2022/02/02(水) 07:51:22 ID:eLtuTeT2 >>954 なるほど破棄すると繋がりが消えるのか ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1615994992/955
956: デフォルトの名無しさん [sage] 2022/02/02(水) 23:39:08 ID:eLtuTeT2 すみません、オブジェクト破棄を以下のように解釈していたのですが そうなるとRemobe-Itemでファイルを削除するとき、変数に入れずにフルパスで指定するのか?と思ったけどやっぱり違うと思うし 改めて変数に入れるのも多分違うと思い、すっきりしない状態です。 多分破棄するの意味を間違って、こちらが解釈してると思うのですが、この場合どう書いてますでしょうか? $lines = (Get-content $FilePath-as [string[]] Remove-Variable FilePath Remobe-Item $FilePath http://mevius.5ch.net/test/read.cgi/tech/1615994992/956
957: デフォルトの名無しさん [sage] 2022/02/03(木) 07:21:37 ID:OMU2Br15 remove variableであってるとおもう。 GCに回収させるとより安全。 $nullを代入でもいけるかな http://mevius.5ch.net/test/read.cgi/tech/1615994992/957
958: デフォルトの名無しさん [sage] 2022/02/03(木) 07:41:16 ID:OMU2Br15 ん?ファイル開いているのはlinesじゃないか? linesを破棄しよう http://mevius.5ch.net/test/read.cgi/tech/1615994992/958
959: デフォルトの名無しさん [sage] 2022/02/03(木) 16:23:23 ID:VbK4RRek gcでファイル開きっぱなしなんてないと思うけど 削除できないってパターンはありそうだな 削除できるまで無限ループでいいんじゃね http://mevius.5ch.net/test/read.cgi/tech/1615994992/959
960: デフォルトの名無しさん [sage] 2022/02/03(木) 20:01:53 ID:gI5tR0VQ Get-content終わってもファイル開きっぱなしなんてあるの? 物凄いデカいファイルだったらあり得るのか? http://mevius.5ch.net/test/read.cgi/tech/1615994992/960
961: デフォルトの名無しさん [] 2022/02/03(木) 23:08:22 ID:mIHwLL5k Get-content(cat)はcat.exeと違うバッファリング方法だからユーザーから見れば開きっぱなしに感じる場合もあるかも http://mevius.5ch.net/test/read.cgi/tech/1615994992/961
962: デフォルトの名無しさん [] 2022/02/06(日) 00:04:34 ID:D4g/hsrG 同じ変数を使い回すのにこだわっている阿呆だな http://mevius.5ch.net/test/read.cgi/tech/1615994992/962
963: デフォルトの名無しさん [sage] 2022/02/06(日) 01:29:48 ID:2aKrrA/x ___ ━┓ ___ ━┓ / ― \ ┏┛/ ―\ ┏┛ / (●) \ヽ ・. /ノ (●)\ ・ / (⌒ (●) /. | (●) ⌒)\ /  ̄ヽ__) / | (__ノ ̄ | /´ ___/ \ / | \ \ _ノ | | /´ `\ -------------------------------------- このスレはあなたにとって役にたちましたか? ○ とても役にたった ○ 役にたった ○ どちらともいえない ○ 役にたたなかった ● 全く役にたたなかった http://mevius.5ch.net/test/read.cgi/tech/1615994992/963
964: デフォルトの名無しさん [sage] 2022/02/06(日) 14:34:16 ID:m5li3VVD そもそもファイルを削除できなかったことが無い http://mevius.5ch.net/test/read.cgi/tech/1615994992/964
965: デフォルトの名無しさん [sage] 2022/02/07(月) 07:35:36 ID:83JX6KKe 削除できないのは他の要因で起こり得るから何とも http://mevius.5ch.net/test/read.cgi/tech/1615994992/965
966: デフォルトの名無しさん [sage] 2022/02/09(水) 12:21:56 ID:3KsDo8lO gcに-waitとか-tailとか付けると開きっぱなしになるけど、明示的に離せってスイッチは無かったっけ? 付けなけりゃ閉じてるものかと思ってた http://mevius.5ch.net/test/read.cgi/tech/1615994992/966
967: デフォルトの名無しさん [sage] 2022/02/09(水) 23:40:08 ID: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() http://mevius.5ch.net/test/read.cgi/tech/1615994992/967
968: デフォルトの名無しさん [sage] 2022/02/10(木) 19:36:03 ID:/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() http://mevius.5ch.net/test/read.cgi/tech/1615994992/968
969: デフォルトの名無しさん [sage] 2022/02/11(金) 00:44:40 ID:xWKZ1gm4 >>968 教えていただきありがとうございます。 テキストボックスだけだと移動が確認できないなど知らなかったのでとても助かりました。 http://mevius.5ch.net/test/read.cgi/tech/1615994992/969
970: デフォルトの名無しさん [] 2022/02/12(土) 03:20:20 ID:NDMck+ft ネタだろ http://mevius.5ch.net/test/read.cgi/tech/1615994992/970
971: デフォルトの名無しさん [sage] 2022/02/12(土) 16:09:12 ID:8ted8XK+ 入力コントロールがフォーカスを失ったという、イベントは無いの? http://mevius.5ch.net/test/read.cgi/tech/1615994992/971
972: デフォルトの名無しさん [sage] 2022/02/12(土) 21:15:19 ID:JXSQUy8V Control.Leave イベント https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.leave http://mevius.5ch.net/test/read.cgi/tech/1615994992/972
973: デフォルトの名無しさん [] 2022/02/13(日) 17:33:00 ID:zeKJdxT+ よろしくお願いします。 現在開いているexcelのアクティブブックを捕まる方法ないでしょうか?? 例えば、アクティブブックのアクティブシートにのってるグラフの軸を全て変更したい時に、 excelからpowershell ISEに画面を変えて操作したいのです。 http://mevius.5ch.net/test/read.cgi/tech/1615994992/973
974: デフォルトの名無しさん [sage] 2022/02/13(日) 17:40:39 ID:0qwas07F >>973 Pythonおすすめ http://mevius.5ch.net/test/read.cgi/tech/1615994992/974
975: デフォルトの名無しさん [] 2022/02/13(日) 17:44:20 ID:zeKJdxT+ >974 ありがとうございます。 xlwingsだとアクティブブックつかめるけど、グラフの細かな設定がない openpyxlだとアクティブブックをつかめなさそう、 でpowershellでできないかな、と。 http://mevius.5ch.net/test/read.cgi/tech/1615994992/975
976: デフォルトの名無しさん [sage] 2022/02/13(日) 17:47:29 ID:0qwas07F >>975 グラフもPythonで描けばいい http://mevius.5ch.net/test/read.cgi/tech/1615994992/976
977: デフォルトの名無しさん [sage] 2022/02/13(日) 17:55:51 ID:lPImUKwL pandasに無いような高等な統計関数が必要でないかぎりpythonで完結したほうが楽なんじゃね http://mevius.5ch.net/test/read.cgi/tech/1615994992/977
978: デフォルトの名無しさん [] 2022/02/13(日) 18:02:06 ID:zeKJdxT+ ありがとうございます。 まぁ、会社でみながexcel使ってるので、、こんな質問をしている次第です、、 http://mevius.5ch.net/test/read.cgi/tech/1615994992/978
979: デフォルトの名無しさん [sage] 2022/02/13(日) 18:06:52 ID:PEAS4D91 シートの名前やらインデックスがpwshでわかれば、その情報をpythonに渡してmatplotlibでtemp.jpgとかで吐き出したグラフをまたpwshで貼れば行ける気がする http://mevius.5ch.net/test/read.cgi/tech/1615994992/979
980: デフォルトの名無しさん [sage] 2022/02/13(日) 18:34:35 ID:Z5jSGqeY ActiveWorkBookプロパティで捕まえられるでしょ VBAから呼んでもPowershellから呼んでもPythonから呼んでもいい http://mevius.5ch.net/test/read.cgi/tech/1615994992/980
981: デフォルトの名無しさん [sage] 2022/02/13(日) 18:37:17 ID:LaQ04ZoE 次スレほい PowerShell -Part 6 https://mevius.5ch.net/test/read.cgi/tech/1644744972/ http://mevius.5ch.net/test/read.cgi/tech/1615994992/981
982: デフォルトの名無しさん [sage] 2022/02/13(日) 18:41:38 ID:LaQ04ZoE 余計なお世話ついでに ISEはもう終わったプロジェクトなので 後継のVSCode+Powershellプラグインに乗り換えるのがオススメ http://mevius.5ch.net/test/read.cgi/tech/1615994992/982
983: デフォルトの名無しさん [] 2022/02/13(日) 20:32:19 ID:zeKJdxT+ 色々アドバイスありがとうございました。 それもそだな、と下記でいけました。お騒がせいたしました $Excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application") $Excel.ActiveWorkbook.ActiveSheet.name http://mevius.5ch.net/test/read.cgi/tech/1615994992/983
984: デフォルトの名無しさん [sage] 2022/02/21(月) 13:09:23 ID:jIppNsU3 教えて下さい powershellで再帰処理をしたいんですが、 "The script failed due to call depth overflow" と言うエラーで最後まで処理してくれません。 再帰回数のスタックオーバーフローで トランポリン処理が有効とまでは調べたのですが 上手く理解出来ず ↓↓ https://qiita.com/yumura_s/items/8a44a70e3e11c4eb1464 詳しい方、よろしくお願いします http://mevius.5ch.net/test/read.cgi/tech/1615994992/984
985: デフォルトの名無しさん [sage] 2022/02/21(月) 13:24:10 ID:Vv5lB4cH そのメッセージの言わんとするところは、すげー効率悪いので再帰で書くな というアドバイスです http://mevius.5ch.net/test/read.cgi/tech/1615994992/985
986: デフォルトの名無しさん [sage] 2022/02/21(月) 13:39:08 ID:jIppNsU3 対象データが階層構造になっていて、 網羅的に処理したいんですが、うーん http://mevius.5ch.net/test/read.cgi/tech/1615994992/986
987: デフォルトの名無しさん [sage] 2022/02/21(月) 14:08:41 ID:Vv5lB4cH 500階層あるデータ構造はさすがに扱ったことがない… そもそも特定の枝が底なし沼なのだとしたら、それでも延々と潜り続ける、というのは本当に意図した挙動なのか? 底なし沼が時々存在して、それに興味が無いのならば素直な余再帰で書ける幅優先探索を勧める 深さ優先で頑張りたいなら、スタックとしてコールスタックを流用するのでなくて、明示的にスタックにpush/popすると少しは経済的 特定の深さに達したら諦める決め打ちもあり トランポリンで遅延評価を積む利点は、入力データ構造を処理するというより、需要に応じて任意の深さのデータを出力できるという点にあるので、悪手かと http://mevius.5ch.net/test/read.cgi/tech/1615994992/987
988: デフォルトの名無しさん [sage] 2022/02/21(月) 14:17:30 ID:+uSXi1Gh トランポリン?のやってることはSchemeで言うCPS相当だね。まずCPSを理解しないと何が起きてるのか判らないと思う。 であるならば理屈ではトランポリンなんて変な事しなくてもスクリプトブロックをクロージャにするやつだけで再帰をクロージャの連鎖呼び出しに置き換えることはできると思う。 http://mevius.5ch.net/test/read.cgi/tech/1615994992/988
989: デフォルトの名無しさん [sage] 2022/02/21(月) 14:38:31 ID:Vv5lB4cH (実装は暗黙のCPSかもしれないけど) schemeだとdelay/forceそのまんまじゃね イテレータとかストリームとか色んな言い方があるけど、何にせよ処理すべきデータがまだ存在していないような時にのみ有効 もし処理対象のデータが既に存在しているのなら、単に無駄な計算を増やすだけだよ http://mevius.5ch.net/test/read.cgi/tech/1615994992/989
990: デフォルトの名無しさん [sage] 2022/02/21(月) 14:43:51 ID:+uSXi1Gh 再帰処理したいつってる本人が理解できないと意味ないからな 再帰が軽い言語で処理すりゃいいんじゃねーの http://mevius.5ch.net/test/read.cgi/tech/1615994992/990
991: デフォルトの名無しさん [sage] 2022/02/21(月) 15:22:36 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1615994992/991
992: デフォルトの名無しさん [sage] 2022/02/21(月) 15:34:29 ID:002PyiUh ごめんdfsだわこれ 全要素網羅したい、という要求だからどっちでもいいと思うけど queueはこれ使うと配列よりかなり速いはず https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.queue-1?view=net-6.0 http://mevius.5ch.net/test/read.cgi/tech/1615994992/992
993: デフォルトの名無しさん [sage] 2022/02/21(月) 16:03:11 ID:jIppNsU3 すみません、めちゃくちゃ難しいっす なんとなくリンク先のスクリプトが 動かせればと思ったのですが… やはり悪手なんですかね http://mevius.5ch.net/test/read.cgi/tech/1615994992/993
994: デフォルトの名無しさん [sage] 2022/02/21(月) 16:22:43 ID:Vv5lB4cH データのサンプル、期待する出力を書いてくれれば具体的なコード提案できるかも(たぶん) http://mevius.5ch.net/test/read.cgi/tech/1615994992/994
995: デフォルトの名無しさん [sage] 2022/02/21(月) 18:40:11 ID:jIppNsU3 色々回答してありがとうございました 結局再帰を使わずループで代用する こととしました トランポリンはもう少し 勉強してみたいと思います http://mevius.5ch.net/test/read.cgi/tech/1615994992/995
996: デフォルトの名無しさん [sage] 2022/02/21(月) 20:07:10 ID:+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() http://mevius.5ch.net/test/read.cgi/tech/1615994992/996
997: デフォルトの名無しさん [sage] 2022/02/21(月) 21:16:04 ID:+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() } http://mevius.5ch.net/test/read.cgi/tech/1615994992/997
998: デフォルトの名無しさん [] 2022/02/21(月) 21:38:24 ID:MnJW8OUO 変なやり方を広めようとするやつの典型例 http://mevius.5ch.net/test/read.cgi/tech/1615994992/998
999: デフォルトの名無しさん [sage] 2022/02/22(火) 00:12:46 ID:wYlI3N7E あえて混乱させようとしてるようにしか思えない 仮に末尾最適化でシリアルなコードを得たとして、まさかそれが木の探索に有利だとでも? 呼び出しをstart-(thread)jobで行ってスレッド/プロセスをばら撒けば済む話じゃないの コールスタック溢れるような計算であればあるほど、スケーラブルで高速 http://mevius.5ch.net/test/read.cgi/tech/1615994992/999
1000: デフォルトの名無しさん [sage] 2022/02/22(火) 02:35:33 ID:LHZaRsEg スタックを使わない再帰呼び出しならスタックは溢れないなw 個々の再帰呼び出しをStart-ThreadJob/Wait/Receiveで機械的に置き換えればとりあえず動く雛形にはなる 代わりにプロセス/スレッドが溢れるけど、スレッドなら単に順番待ちに入るだけで悪さはしない 個々のワーカーが自身の子をwaitしている限りはオーバーヘッドでしかないので、メインプロセスを設けStart時に-StreamingHostで直接報告を挙げさせるべき 長く走ってる枝を殺す等、最適化の可能性は大 メモ化や大域脱出程度で済むような問題には薦めない http://mevius.5ch.net/test/read.cgi/tech/1615994992/1000
1001: 1001 [] ID:Thread このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 341日 2時間 5分 41秒 http://mevius.5ch.net/test/read.cgi/tech/1615994992/1001
1002: 1002 [] ID:Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《プレミアム会員の主な特典》 ★ 5ちゃんねる専用ブラウザからの広告除去 ★ 5ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 月300円から匿名でご購入いただけます。 ▼ プレミアム会員登録はこちら ▼ https://premium.5ch.net/ ▼ 浪人ログインはこちら ▼ https://login.5ch.net/login.php http://mevius.5ch.net/test/read.cgi/tech/1615994992/1002
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.028s