定义了一个 LineDelete 函数,功能是删除指定位置的行或一段行区间。代码包含了删除指定行、删除最后一行以及处理倒数第 N 行的操作。

 

Var =
(
One
Two
Three
Four
Five
)
LineDelete(Var, 2) ; 删除了第2行。
MsgBox, % LineDelete(Var, 2) ; 返回变量的内容,不包括第2行。

; 删除最后一行。同样地,输入-2将删除倒数第二行,以此类推。
MsgBox, % LineDelete(Var, -1) ; 返回变量的内容,不包括最后一行。

; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=46520
LineDelete(Str, Pos, EndPos := "", Opts := "", ByRef Match := ""){
  If (Pos = "" || Pos = 0 || Pos * 1 = "")
    Return Str
  LF := (inStr(Str, "`r`n")) ? ("`r`n")
    : (inStr(Str, "`n")) ? ("`n") : ("")
  L := StrLen(LF)
  Str := LF . StrReplace(Str, LF, LF, NumLines) . LF
  NumLines := (SubStr(Str, 0) != LF) ? (++NumLines) : (++NumLines)
  Pos := (Pos < 0 && Pos >= -NumLines) ? (Pos + NumLines + 1)
     : (Pos < -NumLines || Pos > NumLines) ? ("") : (Pos)
  EndPos := (Pos = "" || EndPos * 1 = "" || EndPos = 0
         || EndPos < -NumLines || EndPos > NumLines) ? ("")
      : (EndPos < 0) ? (EndPos + NumLines + 1) : (EndPos)
  (EndPos != "" && EndPos < Pos)
       ? (Tmp := Pos, Pos := EndPos, EndPos := Tmp, Tmp := "")
  Opts := ((Opts != "B" && Opts != "") || (Pos = EndPos && Opts = "B")
       || (EndPos = "" && Opts = "B")) ? ("") : (Opts)
  StartMatch := (Opts = "") ? (InStr(Str, LF,,, Pos) + L)
        : (InStr(Str, LF,,, Pos + 1) + L)
  EndMatch := (EndPos = "" && Opts = "") ? (InStr(Str, LF,,, Pos + 1))
        : (EndPos != "" && Opts != "") ? (InStr(Str, LF,,, EndPos))
        : (InStr(Str, LF,,, EndPos + 1))
  Match := ((EndPos - Pos = 1 && Opts = "B")
        || Pos = "") ? ("")
       : (SubStr(Str, StartMatch, EndMatch - StartMatch))
  Str := SubStr(SubStr(Str, 1, StartMatch - 1)
       . SubStr(Str, EndMatch + L), L + 1, -L)
  Return Str
}

 

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