mieki256's diary



2017/03/01(水) [n年前の日記]

#1 [autohotkey] AutoHotkeyをまだまだまだ勉強中

AutoHotkeyは言語仕様がなんとなく酷い気がする。ところどころにトラップが仕込んであるというか。いやまあ、AutoHotkeyを言語と呼んでいいのかどうかも分からないけど。Python や Ruby って、ちゃんと作られてるんだなあと改めて感心。AutoHotkeyに比べると、HSPすら美しい言語仕様に思えてくる。

おそらく後から色々仕様が追加されて、過去に書かれたスクリプトとの互換性を重視した結果こうなったのかなと思わないでもなかったり。

名前を間違えてた。 :

「AutoHotKey」じゃなくて「AutoHotkey」なのですな。前者と思い込んでた。他の日記ページを修正。

三項演算子がよく分からん。 :

; 三項演算子のテスト

a=D

; OK
b := a="D" ? 1 : 0     ;=> 1
MsgBox % b

; NG
b := a=D ? 1 : 0       ;=> 0
MsgBox % b

; NG
b = a=D ? 1 : 0        ;=> a=D ? 1 : 0
MsgBox % b

ExitApp

~!Q::
  ExitApp
二番目の書き方をしてしまって、思ったように動かなくてハマったり。

配列の種類が2つあるような気がする。 :

AutoHotkeyには、配列の種類が少なくとも2つあるようで。
  • StringSplitで配列にした場合。
  • Object() を配列のように使った場合。
混在させて書いてしまったものだから、そこでハマった…。

; StringSplit を利用して文字列を分割、配列にする例
; 結果は、Object を使った配列相当とは違う種類の配列になる模様

inputvar := "Pen Pineapple Apple Pen"
StringSplit, outvar, inputvar, %A_space%

; Display the length of the array. 配列の長さを表示
MsgBox % outvar0           ; OK
MsgBox % outvar.MaxIndex() ; NG
MsgBox % outvar.length()   ; NG

; Display elements of an array. 配列の要素を表示
MsgBox % outvar2    ; OK
MsgBox % outvar[2]  ; NG

; Loop, Parse を利用して文字列を分割、配列にする例
; Objectを配列相当として扱う

inputvar := "Pen Pineapple Apple Pen"
outvar := Object()
Loop, Parse, inputvar, %A_space%
  outvar.Insert(A_LoopField)

; Display the length of the array. 配列の長さを表示
MsgBox % outvar0           ; NG
MsgBox % outvar.MaxIndex() ; OK
MsgBox % outvar.length()   ; OK

; Display elements of an array. 配列の要素を表示
MsgBox % outvar2    ; NG
MsgBox % outvar[2]  ; OK

Object()を連想配列として使う。 :

Object()を使うと連想配列っぽいことができるようで。
; スペース区切りの文字列を分割してObject()を連想配列として扱いつつ記録していく例
; Object() へアクセスする記述もテスト

ks=a b c d e `, -

ks := Trim(ks, " ")
cnt = 9000

lst_a := Object()
lst_b := Object()

; like StringSplit
Loop, Parse, ks, %A_space%
{
  k=%A_LoopField%
  v=%k%
  lst_a.Insert(k, v)          ; a: "a"  
  lst_b.Insert(k, cnt)        ; a: 9000
  cnt+=1
}

For k, v in lst_a
{
  If lst_b[k]=9002
  {
    s := k . " : " . lst_b[k]
    MsgBox % s
  }
}

以上です。

過去ログ表示

Prev - 2017/03 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project