autohotkey-字符串操作

计算字符串的长度

strlen函数形式

str = 123我
num := strlen(str)
msgbox , % num

StringLen命令形式

str = 123我
StringLen,num,str
msgbox,% num

注意这里是返回的长度为4个,中文字符"我"被当做一个字符来计算。这里计算的是字符的显示个数,而非占用的存储空间。

字符串拼接

拼接的方法很简单,直接将两个字符串用空格隔开就可以了

a:= "abc"
b := 123
;c显示出来为abc123
c :=  a  b
msgbox,% c

c显示出来为abc123

但若是ab拼接时均未数值型变量的话,其可以直接将数字连接到一起,例如a=100,b=200,ab拼接到一起的话就是100200,很是神奇!可以说,autohotkey的语法真的是太随心所欲了。

a := 100
b := 200

; c 的值是 100150
c := a b - 50
msgbox,% c

如何遍历字符串

Loop, Parse, InputVar [, Delimiters, OmitChars]

loop是循环,parse是命令,解析字符串,inputVar是对应的需要遍历的字符串

Delimiters是以什么字符为分隔符,OmitChars是指定要忽略的字符。

若是不填参数,会依次跳出来a b c d四个字符串。

遍历每一个字符

text := "abcd"
Loop, Parse, text
{
    MsgBox, %A_LoopField%
}

遍历一段文字中的每一行

text =
(
line1
line2
line3
)
msgbox,% text

Loop, Parse, text, `n, `r
{
    MsgBox, %A_LoopField%
}

这个是以`n为分隔符来进行遍历的。`r又是什么呢?

在类UNIX操作系统中,文本中的换行符就是`n,但在Windows中,换行符是`r`n。如果处理一段换行符是`r`n的文本,直接用`n分割,会保留多余的`r,所以设置OmitChars为`r,可以将`r来去掉

以空格为分隔符遍历文本

text := "ab c d"

Loop, Parse, text, %A_Space%
{
    MsgBox, %A_LoopField%
}

以逗号为分隔符遍历文本

text := "ab c,d,e" 
Loop, Parse, text, `,
{
    ; 依次弹出
    ; a b
    ; c d:xxx
    MsgBox, %A_LoopField%
}

注意在autohotkey语法里,逗号是特殊字符,因此这里需要加一个转义字符`。

以冒号为分隔符遍历文本

text := "ab c,d,e,:1234"
Loop, Parse, text, :
{
    ; 依次弹出
    ; a b,c d
    ; xxx
    MsgBox, %A_LoopField%
}

以特定字符串为分割遍历文本

text := "abc()bcd(cde"
text := StrReplace(text, "()", "@")		;将括号来先换成一个原来的字符串中没有出现过的字符
Loop, Parse, text, @
{
    ; 依次弹出
    ; abc
    ; bcd(cde
    MsgBox, %A_LoopField%
}

转义字符

a = `,`{
msgbox,% a

有些符号,在autohotkey里面是特殊符号,不能直接使用因此需要添加转义符号,上面这段代码运行之后输出的值为 ,{ 

检测字符串是否为空

a := ""

if (a = "")
{
    msgbox,a为空字符串
}
else
{
	msgbox,a不是空字符串
}

查找一个字符串中是否包含另一个字符串

FoundPos := InStr(Haystack, Needle [, CaseSensitive = false, StartingPos = 1, Occurrence = 1])

Haystack是被查找的字符串(长的),

Needle是待查找的字符串(短的),

CaseSensitive用于设置是否区分大小写,

StartingPos是设置开始查找的位置(1为从头开始,如果是0或者负数,将逆序查找),

Occurrence指查找几次(比如Occurrence是2,那么即使Haystack里面有一个Needle,也会因为没有第2个Needle而返回0)

InStr函数的返回值是Needle在Haystack的位置,从1开始,如果返回0,说明没找到。

position := InStr("123abc789","abc") 
msgbox,% position

上面的位置返回的为4

Haystack := "The Quick Brown Fox Jumps Over the Lazy Dog"
Needle := "the"
MsgBox % InStr(Haystack, Needle, false, 1, 1) ; 不区分大小写的搜索, 返回第1次匹配的位置,即1。
MsgBox % InStr(Haystack, Needle, true) ; 区分大小写的搜索, 返回首次匹配的位置, 也是返回32的位置。

截取字符串

NewStr := SubStr(String, StartPos [, Length])

String是原始字符串,

StartPos是截取的起点,从1开始,如果是0,表示截取最后一个字符;如果是-1,表示截取最后两个字符,以此类推。

length为截取的长度,如果省略此参数,则截取到原始字符串的末尾。

简单来说就是从字符串中间找一个位置,然后往后面截取固定的长度。

MsgBox % SubStr("123abc789", 4, 3) ; 返回 abc
String := "The Quick Brown Fox Jumps Over the Lazy Dog"
MsgBox % SubStr(String, 1, 19)  ; 返回 "The Quick Brown Fox"
MsgBox % SubStr(String, -7)  ; 返回 "Lazy Dog"

分割

Array := StrSplit(String [, Delimiters, OmitChars])

String是原始字符串,Delimiters是分隔符,支持字符串,OmitChars移除和分隔符相邻的特定字符。
返回的Array是一个数组,可以用Array[1]来访问第一个元素,用Array.Length()可以获取数组中的元素个数。

将路径字符串来分解为名称、目录、扩展名和驱动器

FullFileName = C:\My Documents\Address List.txt

; 只获取上面的单独的文件名:
SplitPath, FullFileName, name
msgbox,% name 


; 只获取目录:
SplitPath, FullFileName,, dir

; 获取所有信息:
SplitPath, FullFileName, name, dir, ext, name_no_ext, drive
   
; 上面这行会对变量进行如下设置:
; name = Address List.txt
; dir = C:\My Documents
; ext = txt
; name_no_ext = Address List
; drive = C:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值