;大神们早上好!我想请教个数据读取的问题。有没有办法实现:在变量里面有数十行数据,若检测到其中某一行存在指定数据,就以当行为准,再往上三行,向下截取剩余数据?

; 循环读取行,每一行判断一次,其实开销挺大的,大概还没有直接用正则全部读取快
; RegExReplace(text, "[\r\n]+", "`r`n")  ; 管它是啥样的换行符,我直接给它统一了【V1和V2的不同】

text=
(
1fajeptiwg
2fajeptijaeie
3tawejtpoawhjef
4awetjaweptijae
5Staeitfejit
6taejtoifa===123===jeeiotgja
7Taejitpajeit
8aejtioapheipotjaae
9fqklwejqjqwejlkqwe
10需求是:往上三行,和向下截取剩余数据
)

/*   ; 读取文件写法【直读即可,因为文件包含`r】
if !FileExist(A_ScriptDir "\test.txt") ; 读取文件有效,因为是利用`r识别换行
  FileAppend, %text%, %A_ScriptDir%\test.txt
FileRead, text, %A_ScriptDir%\test.txt
*/

搜索内容 := "123"

; 返回:往上三行,和向下截取剩余数据
; text := StrReplace(text, "`n", "`r`n") ; V1纯字符串,需要换行加`r标记,或者正则加 `a) 才能识别
; NeedleRegEx := Format("`a)(.*\R){3}.*{1:}[\s\S]*", 搜索内容)  ; => `a)(.*\R){3}.*123[\s\S]*

; 返回:往上一行,和往下两行的数据【如果下不够3行会返回为空】
; NeedleRegEx := "`a)((.*\R){1}).*" 搜索内容 "((.*\R){3})"

; 返回:往上200行,和往下200行的数据
; NeedleRegEx := "`a)(.*\R){0,200}.*" 搜索内容 ".*(\R.*){0,200}"

; 返回:搜索内容 匹配行的数据
NeedleRegEx := "`a)(.*" 搜索内容 ".*)"  ; 如果是文件数据【包含`r】可以去掉 `a) 匹配【效率提升】
; NeedleRegEx := "[^\r\n]*?" 搜索内容 "[^\r\n]*"  ; 效率低的反面教材
; NeedleRegEx:= "`am).*" 搜索内容 "*"  ; 返回找到数据之前的行内容1【精简】
; NeedleRegEx := "(.*\R){" StrLen(搜索内容) "}\K[^\r\n]*"搜索内容 "*"  ; 返回找到数据之前的行内容2
; NeedleRegEx:= "([^\n]+\n){3}[^\n]+" 搜索内容 "*"  ; 返回 往上三行+本行内容
RegExMatch(text, NeedleRegEx, 正则匹配结果)
Msgbox % 正则匹配结果

; V2源代码
; findstr := "123"
; text := FileRead("test.txt")
; NeedleRegEx := Format("(.*\R){3}.*{1:}[\s\S]*", findstr)
; Msgbox(NeedleRegEx)
; RegExMatch(text, NeedleRegEx, &outputVar)
; Msgbox(outputVar[])

 

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