从字符串中提取任何行或连续行.ahk

; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=74127

; MsgBox % LineStr("Item 1|Item 2|Item 3|Item 4", 2, 1, "|")

H := "Line_1`r`nLine_2`r`nLine_3`r`nLine_4`r`nLine_5`r`nLine_6`r`nLine_7`r`nLine_8`r`nLine_9"

MsgBox,,Example 1, % "提取第一行`n`n" .                      LineStr(H, 1, 1)
MsgBox,,Example 2, % "提取前两行`n`n" .                 LineStr(H, 1, 2)
MsgBox,,Example 3, % "提取行5`n`n" .                          LineStr(H, 5, 1)   
MsgBox,,Example 4, % "从第五行提取全部内容 `n`n" .            LineStr(H, 5)
MsgBox,,Example 5, % "从第五行提取3行`n`n" .         LineStr(H, 5, 3)
MsgBox,,Example 6, % "提取最后一行`n`n" .                       LineStr(H, 0)             
MsgBox,,Example 7, % "提取最后2行`n`n" .                    LineStr(H, -1)
MsgBox,,Example 8, % "提取最后一行之前的2行`n`n" .     LineStr(H, -2,2)        
MsgBox,,Example 9, % "提取除第一行和最后一行以外的所有行`n`n" . LineStr(H, 2,-1)

LineStr(ByRef S, P, C:="", D:="") {   ;  LineStr v0.9d,   by SKAN on D341/D449 @ tiny.cc/linestr
  Local L := StrLen(S),   DL := StrLen(D:=(D ? D : Instr(S,"`r`n") ? "`r`n" : "`n") ),   F, P1, P2 
  Return SubStr(S,(P1:=L?(P!=1&&InStr(S,D,,0))?(F:=InStr(S,D,,P>0,Abs(P-1)))?F+DL:P-1<1?1:0:(F:=1)
:0),(P2:=(P1&&C!=0)?C!=""?(F:=InStr(S,D,,(C>0?F+DL:0),Abs(C)))?F-1:C>0?L:1:L:0)>=P1?P2-P1+1:0)
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。