;大神们早上好!我想请教个数据读取的问题。有没有办法实现:在变量里面有数十行数据,若检测到其中某一行存在指定数据,就以当行为准,再往上三行,向下截取剩余数据? ; 循环读取行,每一行判断一次,其实开销挺大的,大概还没有直接用正则全部读取快 ; 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[])
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)