- E.g. if you specify a space and 50 characters, it will start at character 51 and look backwards for the first space to the left, if not found: it will start at character 1 and look for the first space to the right, if not found: it will treat the text as one line.
- Do post any links to relevant functions/threads. Cheers.
Code: Select all
vText := "aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa"
MsgBox, % JEE_StrWrap(vText, 17)
MsgBox, % ";" JEE_StrWrap(vText, 17, " ", "`r`n;")
;==================================================
; ;e.g.
; vText := "aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa aaaaa"
; MsgBox(JEE_StrWrap(vText, 17))
; MsgBox(";" JEE_StrWrap(vText, 17, " ", "`r`n;"))
;split one line into multiple lines
;vMaxLen: maximum length in characters per line
JEE_StrWrap(vText, vMaxLen, vNeedle:=" ", vSep:="`r`n")
{
local
static vIsV1 := InStr(1, 1,, 0)
vOutput := ""
VarSetCapacity(vOutput, StrLen(vText)*2*2)
Loop
{
vLen := StrLen(vText)
if (vLen <= vMaxLen)
return vOutput vText
;e.g. AHK v2: abcdefghij ;h is position 8 aka -3=-len+8-1=-10+8-1
;vPos := JEE_InStr(vText, vNeedle, 1, vMaxLen - vLen)
vPos := InStr(vText, vNeedle, 1, vMaxLen - vLen + vIsV1) ;find first occurrence at vMaxLen+1 or before
if !vPos
vPos := InStr(vText, vNeedle)
if !vPos
return vOutput vText
vOutput .= SubStr(vText, 1, vPos-1) vSep
vText := SubStr(vText, vPos+StrLen(vNeedle))
}
}
Edit some text files, string length - AutoHotkey Community
https://autohotkey.com/boards/viewtopic.php?f=5&t=33520