[過去ログ]
AutoHotkey スレッド part30 IDのみ (1002レス)
AutoHotkey スレッド part30 IDのみ http://egg.5ch.io/test/read.cgi/software/1644313099/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
634: 名無しさん@お腹いっぱい。 [sage] 2023/10/13(金) 20:31:04.41 ID:lUFs50Mf0 v2使ってます ダブルクオーテーションで囲んだ変数を展開する方法はあるでしょうか? 調べてみたらv1の頃はできたっぽいんですが… 以下は例で、本当にやりたいのはテキストファイルに書いておいた文字列が含む変数を展開することです v := "「A_AhkVersion」" MsgBox v ; A_AhkVersionと表示されるのを2.0.10とかにしたい http://egg.5ch.io/test/read.cgi/software/1644313099/634
635: 名無しさん@お腹いっぱい。 [sage] 2023/10/13(金) 21:09:19.74 ID:kszrn8gL0 無変換(SC07B)+変換(SC079)+o はどうやって書けばいいでしょうか? ~SC079 & SC07B & o:: は動きませんでした http://egg.5ch.io/test/read.cgi/software/1644313099/635
636: 名無しさん@お腹いっぱい。 [sage] 2023/10/13(金) 22:58:19.97 ID:1crCpIhe0 >>634 https://ahkscript.github.io/ja/docs/v2/Variables.htm#Intro >>635 修飾キー(Ctrl、Shift、Alt、Win)以外の3つ以上のコンビネーションキーはサポートされていない ホットキーを2つまでにして、#IF または ホットキーの処理内で GetKeyState で3つ目以降のキー状態を取得して分岐させることは可能ではあるが そもそも使用中のキーボードによっては修飾キー以外のキーは3つ以上の同時押しを認識できない場合も多々あるのでそこら辺は環境による http://egg.5ch.io/test/read.cgi/software/1644313099/636
637: 名無しさん@お腹いっぱい。 [sage] 2023/10/13(金) 23:04:18.36 ID:ERs/JTAS0 >>634 https://www.autohotkey.com/docs/v2/lib/RegExMatch.htm#ExDeref これv1の時からTransform廃止するからこんな感じの関数でやってねって言ってたけど 関数内ローカルの展開に使えなくてTransformの代わりにならない http://egg.5ch.io/test/read.cgi/software/1644313099/637
638: 名無しさん@お腹いっぱい。 [sage] 2023/10/14(土) 00:58:11.68 ID:iMxXiXwK0 >>636 ありがとうございます アドバイス通りにやったらうまくいきました #If GetKeyState("SC07B", "P") && GetKeyState("SC079", "P") i:: SendInput, {Up} return #if ところが次の問題が~sc079 & i::を設定していると動かなくなります 同時併用はできないでしょうか? http://egg.5ch.io/test/read.cgi/software/1644313099/638
639: 名無しさん@お腹いっぱい。 [sage] 2023/10/14(土) 08:08:17.62 ID:DXkbEwUP0 >>638 SC079 & i:: if(GetKeyState("SC07B", "P")){ ;処理A } else { ;処理B } return とかどう? http://egg.5ch.io/test/read.cgi/software/1644313099/639
640: 名無しさん@お腹いっぱい。 [sage] 2023/10/14(土) 08:39:17.96 ID:281ftA3E0 >>638 実際にどういう書き方をしているかはわからんけど、おそらく #If が同条件での発動になってて ~sc079 & i:: の方が優先されているだけだと思う やり方は色々あるけど一例としてこんな感じでも動く #If !GetKeyState("SC07B", "P") ~sc079 & i::SendInput, {Down} #If #If GetKeyState("SC07B", "P") && GetKeyState("SC079", "P") i::SendInput, {Up} #If http://egg.5ch.io/test/read.cgi/software/1644313099/640
641: 名無しさん@お腹いっぱい。 [sage] 2023/10/14(土) 09:17:07.76 ID:3TcJyM+70 >>637 どうにかならないかと思ったけどあんまりどうにもならなかった ローカル変数を扱いたいときだけ列挙してクロージャにして渡して MsgBox Deref("%var1%def%var2%", varName => (var1, var2, %varName%)) 関数定義のところで受け取って Deref(Str, derefFunc?) 途中のderef部分を out .= IsSet(derefFunc) ? derefFunc(m[2]) : %m[2]% みたいな http://egg.5ch.io/test/read.cgi/software/1644313099/641
642: 名無しさん@お腹いっぱい。 [sage] 2023/10/14(土) 13:14:24.79 ID:281ftA3E0 >>634 636だけどちょっと読み違えてた。そういうことをやりたいならこんな感じで変数にしたい文字列を置き換えるかな… v := "「A_AhkVersion」「A_YYYY」" for var in ["A_AhkVersion", "A_YYYY"] v := RegExReplace(v, var, %var%) MsgBox v 連想配列を用いる方法もある。一見冗長に見えるがプログラミング的に推奨されるのはこちらの方だと思う variables := Map("A_AhkVersion", A_AhkVersion, "A_YYYY", A_YYYY) for key in variables v := RegExReplace(v, key, variables[key]) v1のTransformも内部的には同様のことやってると思う。ただ、廃止された理由にも含まれると思うけど 予想外のところが変換されてたりしてバグの温床になるのであまり推奨されない やるにしてももっとマッチパターンを厳密化した方が良い >>641 の言ってることは別の問題で、やりたくはないんだろうけど元の変数をグローバル化してしまうのが簡単ではある まあ手段が目的化してしまってる所もあるんだろうけど、 単純な文字列展開なら文字列結合やFormat関数でどうとでもなるので別にいらないのでは?とも思う http://egg.5ch.io/test/read.cgi/software/1644313099/642
643: 名無しさん@お腹いっぱい。 [sage] 2023/10/14(土) 17:31:51.42 ID:iMxXiXwK0 >>639 ありがとうございます それで完璧に動作しました! >>640 ありがとうございます アドバイス通り競合していたみたいです http://egg.5ch.io/test/read.cgi/software/1644313099/643
644: 名無しさん@お腹いっぱい。 [sage] 2023/10/14(土) 21:33:45.85 ID:3TcJyM+70 >>642 元の質問とは別で>>637の挙げてるドキュメントの話だって説明ないとわかりにくかったね、今度から気をつけるわ > 手段が目的化 はまさにそれで、パズル感覚でどうにかならないかなと考え始めたんで Transformについては自分も同意するところ http://egg.5ch.io/test/read.cgi/software/1644313099/644
645: 633 [sage] 2023/10/15(日) 13:03:37.69 ID:/B+GGiqI0 お返事をくださった皆さん、ありがとうございました 書き忘れてましたがv1でのやり方はご指摘の通りTransformでした 使う変数は組込変数で、使う場面も限定されるので、連想配列で工夫したいと思います http://egg.5ch.io/test/read.cgi/software/1644313099/645
646: 名無しさん@お腹いっぱい。 [sage] 2023/10/15(日) 15:47:01.10 ID:TKXXnipr0 https://www.autohotkey.com/docs/v2/Scripts.htm#continuation-section だいぶ前のレスで上記URLを参考にしたと思われる v2でのヒアドキュメントが変数を絡めると見にくくなる話が出てたが 継続行開始と終了の()の内側に"入れ改行位置を分けてやればいけることに気がついた F1:: { ; 公式ドキュメントの例に則った記述 MsgBox(" (Join 現在のバージョンは「 )" A_AhkVersion " ( 」です。 )", "テストメッセージ") } F2:: { ; ちょっと詰め込みすぎて逆に分かりにくかもだがこんな感じでいける MsgBox( (Comment "現在のバージョンは「" A_AhkVersion "」です。 今年は" A_YYYY "年です。 来年は" A_YYYY + 1 "年になるでしょう。 ; VSCODE AHKv2-LSP では文字列カラーになるけど、 ; Commentオプションも機能する 来月は" ((A_MM + 1 > 12) ? 1 : A_MM + 1) "月のはずです。" ), "テストメッセージ") } ただし、公式記法と違い文中の"は`"のように明示的にエスケープする必要がある その他の自動インデント判定等は普通に機能する http://egg.5ch.io/test/read.cgi/software/1644313099/646
647: 名無しさん@お腹いっぱい。 [sage] 2023/10/16(月) 06:27:36.80 ID:HnFsiC+R0 なんか無理やりヒアドキュメント使いたいってだけで本末転倒なんよ 最初の例だと F1:: { MsgBox( "現在のバージョンは「" A_AhkVersion "」です。" ,"テストメッセージ" ) } とか書けばいいだけだし、二番目の例だと逆に可読性が低くてメンテナンスに問題出やすい それに仕様の穴を突くような変態表記していると、本体更新で後々にバグとして顕在化してきて支障が出る http://egg.5ch.io/test/read.cgi/software/1644313099/647
648: 名無しさん@お腹いっぱい。 [sage] 2023/10/16(月) 10:20:02.59 ID:Bz5r9zRC0 なにがなんでもv2の欠点を欠点と認めない人がずっと頑張ってるけど その行為なんかメリットある? http://egg.5ch.io/test/read.cgi/software/1644313099/648
649: 名無しさん@お腹いっぱい。 [sage] 2023/10/16(月) 11:38:46.89 ID:Wb0gkuWM0 v3まで待つしか http://egg.5ch.io/test/read.cgi/software/1644313099/649
650: 名無しさん@お腹いっぱい。 [sage] 2023/10/16(月) 12:44:38.46 ID:JfuEMiXm0 v1のヘンタイコードに対応することは二度とないよ http://egg.5ch.io/test/read.cgi/software/1644313099/650
651: 名無しさん@お腹いっぱい。 [sage] 2023/10/16(月) 16:43:14.30 ID:eNxVDezc0 過去の資産のあるゴミ言語から 資産のないゴミ言語になった http://egg.5ch.io/test/read.cgi/software/1644313099/651
652: 名無しさん@お腹いっぱい。 [sage] 2023/10/16(月) 16:50:51.45 ID:Wb0gkuWM0 先進性があるならともかく、どっかで見たような言語を再開発する意味とは http://egg.5ch.io/test/read.cgi/software/1644313099/652
653: 名無しさん@お腹いっぱい。 [sage] 2023/10/16(月) 18:31:08.61 ID:dLR3pMBg0 すまん例が悪かった。AHKでヒアドキュメントを使いたい理由って大抵は簡易的なリストや箇条書きなどの複数行の文を出力する際に コード上で書いてあるインデントをLTrimで無視したい場合だと思うんだけど、公式例通りにやると変数が絡むとややこしくなるが、こういう風にも書けるということ 俺も理解が足りてなかったが、仕様上の穴ではなく、公式ドキュメントが分かりにくいだけで継続セクションが実際にどのようにどこまで有効であるのかという話 よく読んだら引用符で始まらない場合は式として扱われるという主旨のことが回りくどく書いてあった。正直そんなに必要になることはないし、どうでもいいと言われればそれでいいんだけどね ; 公式例 ""で囲んだ文字列内で継続セクションを開始している為()内の全てが文字列として扱われ、文中の"も文字として扱われるので、式を扱う場合は一度セクションを区切る必要がある MsgBox(" (LTrim 現在のバージョンは「 )" A_AhkVersion " (LTrim 」です。 あいうえお かき"く"けこ`nさしすせそ )" ) ; 5chの仕様の為、インデントは全角スペースに置き換え ; 文字列結合 各行頭行末に"、文中の"はエスケープ、改行もエスケープされた物のみ 全文を1行にまとめても良い MsgBox( "現在のバージョンは「" A_AhkVersion "」です。`n" "あいうえお`n" "かき`"く`"けこ`nさしすせそ" ) ; ""の位置を変え、文中の"はエスケープ 文字列結合と同じく式として扱われ、対応する()内が継続セクションと認識される MsgBox( (LTrim "現在のバージョンは「" A_AhkVersion "」です。 あいうえお かき`"く`"けこ`nさしすせそ" ) ) http://egg.5ch.io/test/read.cgi/software/1644313099/653
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 349 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.200s*