autohotkey - 如何检查剪贴板中的第一个单词是什么?

假设我的 Cliboard 变量当前处于这种状态:

Clipboard:= "-Classes Essay on Hobbes

我想根据剪贴板中的第一个块/单词执行 If 条件,在本例中为 -Classes 。本质上使用 FileAppend 执行如下操作:

if "-diary"{
    ;Create file in /Diary/Entry 27.MD
}

Else if  "-Classes"{
    ;Create file in /Classes/Essay on Hobbes.MD
}

我能够在文档中找到此页面 https://www.autohotkey.com/docs/commands/IfIn.htm 但它不是位置的,这意味着如果块 -Classes 由于某种原因也作为文件名的一部分出现,我的逻辑就会中断。

我也冒昧地在其他论坛上交叉发布了这个问题。任何帮助将不胜感激!

回答1

或者..你可以:

Clipboard:= "-Classes Essay on Hobbes"
Gosub % subroutine := SubStr( Clipboard, 1, InStr( Clipboard, " " )-1 )

Clipboard:= "-diary diary example"
Gosub % subroutine := SubStr( Clipboard, 1, InStr( Clipboard, " " )-1 )
Return

-diary:
    MsgBox % "Diary:`n"  StrReplace( clipboard, subroutine " " ) 
    ;Create file in /Diary/Entry 27.MD
Return

-Classes:
    MsgBox % "Classes:`n"  StrReplace( clipboard, subroutine " " )
    ;Create file in /Classes/Essay on Hobbes.MD
Return

回答2

你可以试试 StrSplit()

; Array := StrSplit(String , Delimiters, OmitChars, MaxParts)
clip_array := StrSplit(Clipboard, A_Space, , 1)

if clip_array[1] = "-diary"{
    ;Create file in /Diary/Entry 27.MD
}

Else if clip_array[1] = "-Classes"{
    ;Create file in /Classes/Essay on Hobbes.MD
}

Else {
    MsgBox % "No match for " clip_array[1]
}

在此处描述 https://www.autohotkey.com/docs/commands/StrSplit.htm 并注意 MaxParts 的参数,它解决了要查看的“令牌”数量(保持最后的其余部分)如果剪贴板足够大以致重要(在这种情况下,我不确定其他答案是否更好)。

回答3

如果剪贴板上的文本量很大,则可能会导致脚本延迟将所有文本加载到脚本内存中,只需检查第一个 value。我建议使用 regexMatch,因为它可以返回一个位置并捕获单词,而无需解析所有内容。

; for reference of regexMatch function
; regexMatch(Haystack, Needle, outputVar, startPos)

Fnd := regexMatch(Clipboard, "U)(\-[\w]+))", capSubStr, inStr(Clipboard, "-"))
if (Fnd==0) {
    Msgbox, Didn't find a word on the Clipboard.
    Return
}
checkVal := capSubStr1
if (checkVal=="-diary") {
    ;Create file in /Diary/Entry 27.MD
} Else if (checkVal=="-Classes") {
    ;Create file in /Classes/Essay on Hobbes.MD
}

以下是在 AHK 中使用正则表达式的基本参考:https://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm

如果您还不熟悉正则表达式,这将让您了解上述表达式实际上在寻找什么。

相似文章

c++ - 所有尖括号的名称是什么?

在C++中,我们在不同的地方有尖括号,我认为有时在与其他开发人员交谈时区分它们很重要,例如在暴徒编程期间导航某人时(例如“转到第36行中的箭头运算符”或“现在写宇宙飞船运算符”)。虽然我当然可以称它们...

随机推荐

最新文章