2017-04-07 19 views
1

私は、InputBoxからユーザー入力を求めるプロンプトを表示し、行ごとにユーザー入力に基づいてテキストファイルをナビゲートし、出力をクリップボードにコピーするAHKスクリプトを作成しました。AHKテキストファイルから配列をグリップする

例:

  • "4maxが" 変数UserInputとして与えられた場合、それは クリップボードに出力 "スリープ" をコピーしてください。

  • "3ben"がUserInputとして指定されている場合は、出力 "jog"を クリップボードにコピーする必要があります。

サンプルテキストファイル:

max:eat:drink:sleep:play 
jerry:eat:play:drink:jog 
laura:drink:eat:sleep:play 
ben:sleep:jog:eat:drink 

誰かが、以下のスクリプトを高めていただけますか?

また、空のメモ帳を開いた状態でスクリプトを実行すると、クリップボードの現在の項目がメモ帳に貼り付けられています。今で=::(

スクリプト:。。対

#SingleInstance, force 
#Include C:\Users\mpechett\Desktop\ahk\tf.ahk 

InputBox, SearchText, Search for Name 

x = %SearchText% 
RegExMatch(x, "(\d*)(\w*)", y) 
SearchText:= % y2 
ptext = % TF_Find("C:\Users\mpechett\Desktop\ahk\test.txt", "","", SearchText, 1, 1) 
StringSplit, word_array, ptext, :, . 

;msgBox % word_array%y1% 

Clipboard = % word_array%y1% 
Msgbox, %Clipboard% 

Esc::ExitApp 

答えて

0

わかりましたので、私は完全にあなたの設計を実装していないに見えますあなたのクリップボードの割り当てが非推奨使用しているように=記号私はあなたのコードをテストしなかったので、外部のライブラリを使わずにソリューション全体を書き直す方が良いと判断しました。

試してみてください:

testdata = 
    (
    max:eat:drink:sleep:play 
    jerry:eat:play:drink:jog 
    laura:drink:eat:sleep:play 
    ben:sleep:jog:eat:drink 
    ) 

    InputBox, SearchText, Search for Name 

    MsgBox % clipboard := grepFile(SearchText, testdata) 

    grepFile(userinput, file) { 
     For e, v in StrSplit(userinput) { 
      If v is alpha 
       key .= v 
      else 
       num .= v 
     } 

     arr := formatFile(file) 

     return arr[key][num] 
    } 

    formatFile(file) { 
     ourObj := {} 
     For e, line in StrSplit(file, "`n", "`r") { 
      arr := StrSplit(line, ":") 
      ourObj[(arr.1)] := arr    
     } 
     return ourObj 
    } 

編集:

testdata = 
(
max-test:eat:drink:sleep:play 
jerry-test:eat:play:drink:jog 
laura-test:drink:eat:sleep:play 
ben-test:sleep:jog:eat:drink 
) 

testData := StrReplace(testData, "-test") 

InputBox, SearchText, Search for Name 

MsgBox % clipboard := grepFile(SearchText, testdata) 

grepFile(userinput, file) { 
    For e, v in StrSplit(userinput) { 
     If v is alpha 
      key .= v 
     else 
      num .= v 
    } 

    arr := formatFile(file) 

    return arr[key][num] 
} 

formatFile(file) { 
    ourObj := {} 
    For e, line in StrSplit(file, "`n", "`r") { 
     arr := StrSplit(line, ":") 
     ourObj[(arr.1)] := arr    
    } 
    return ourObj 
} 
+0

ねえが、実際に私は(それは5000本の+のラインを持っていると)別のテキストファイル内のテストデータを持ちたいと私はスクリプトからテキストファイルをgrepしする必要があります。それに応じて私の修正を手伝ってください。 –

+0

ねえ、私はテキストファイルから内容をgrepすることができました。 –

+0

データが次のようなものなら、スクリプトに ' - 'をどのように追加するのですか? max-test:eat:drink:sleep:play jerry-test:eat:play:drink:jog laura-test:ドリンク:eat:sleep:play ベンテスト:sleep:jog:eat:drink –

0
#SingleInstance, force 
SetTitleMatchMode, 2 
SetWorkingDir, %A_ScriptDir% ; if an absolute path of the file isn't specified 

; Put tf.ahk in the folder: %A_MyDocuments%\AutoHotkey\Lib\TF-master 
#Include <TF-master\tf> 

F1:: ; assign a hotkey to the code (the script is persistent because of "Esc::ExitApp"). 
InputBox, SearchText, Search for Name 
if ErrorLevel 
    return 
x = %SearchText% 
RegExMatch(x, "(\d*)(\w*)", y) 
SearchText:= % y2 
ptext = % TF_Find("C:\Users\mpechett\Desktop\ahk\test.txt", "","", SearchText, 1, 1) 
StringSplit, word_array, ptext, :, . 

; Instead of the clipboard you can use another variable to save the output: 
myVar = % word_array%y1% 
; Msgbox, %myVar% 

IfWinExist, Untitled - Notepad 
{ 
    WinActivate 
    WinWaitActive 
    SendInput, %myVar% 
} 
return 

Esc::ExitApp 
関連する問題