找回密码
 加入
搜索
查看: 7536|回复: 19

[AU3基础] [已解决]如果检测指定了行文本字符串的下一行是否为空行

 火.. [复制链接]
发表于 2016-2-6 15:42:12 | 显示全部楼层 |阅读模式
本帖最后由 131738 于 2016-2-7 14:05 编辑

例如:
abcd
123456
要求检查 "abcd" 的下一行是否为空行?

下面这个符合要求, 放过检查!
abcd

123456
谢谢!!!
 楼主| 发表于 2016-2-6 19:00:42 | 显示全部楼层
顶起................................
发表于 2016-2-6 19:02:07 | 显示全部楼层
Local $sSource = 'abcd' & @CRLF & @CRLF & '123456'
Local $sK = 'abcd'
StringRegExp($sSource, $sK & '\h*\r\n\h*\r\n\h*(?=\V|$)')
If Not @Error Then MsgBox(0, 'ok', $sSource)
 楼主| 发表于 2016-2-6 22:37:34 | 显示全部楼层
afan 发表于 2016-2-6 19:02


谢谢,我明天编脚本试试...............
 楼主| 发表于 2016-2-7 11:21:25 | 显示全部楼层
本帖最后由 131738 于 2016-2-7 11:43 编辑
afan 发表于 2016-2-6 19:02


没有效果, 你的文本变量 $sSource 包含 2 个 @CRLF , 'ok' 消息框显示这个变量的结果是 2 行文本之间有一个空行, 这不是我需要检查的情况.
修改文本变量 $sSource 包含 1 个 @CRLF, 'ok' 消息框显示这个变量结果是 2 行文本之间没有空行, 这就是我需要检查的情况.
但我无法从这段代码中获取有用信息, 无论 1 个 @CRLF 还是 2 个 @CRLF 都能显示 ok 消息框, 因此你的这段代码于我没有帮助.

分析你的这个正则表达式,  似乎是检查 'abcd' 行尾($)有否任何水平空白字符, 回车符, 换行符.
受此启发, 考虑在  'abcd' 尾部之后寻找回车符和空行:
如是将表示 'abcd' 尾部+回车符的表达式写成 (abcd)\b\r, 网上搜索到一条表示空行的表达式 \n[\s| ]*\r
拼凑为 (abcd)\b\r\n[\s|]*\r 之后, 在 Au3.REHelper.exe 测试, 居然通过了....

现在:

1. 我实际需要检查的行文本是 @@End@@, 替换 abcd 后, 原本有效的表达式失效了!
    这个什么原因, 请帮忙修改下, 即实际需要的表达式是  (@@End@@)\b\r\n[\s|]*\r

2. 看截图:

截图中的问题在 1.5 版中也存在, 当我准备反馈时发现你以升级到 1.5.1, 现在用 1.5.1 测试, 还是出现这个问题.

文字表达有限, 以上不知你能否看明白.........

谢谢! 预祝新年快乐!!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-2-7 12:54:00 | 显示全部楼层
本帖最后由 afan 于 2016-2-7 13:47 编辑

上面的写错判断了,应该是这个:
Local $sSource = 'abcd' & @CRLF & @CRLF & '123456'
Local $sK = 'abcd'
If StringRegExp($sSource, $sK & '\h*\r\n\h*\r\n\h*(?=\V|$)') Then
        MsgBox(0, '含有空行', $sSource)
Else
        MsgBox(0, '未含空行', $sSource)
EndIf
正则工具输出的问题已确认是Bug,Local $aSR 应该改为 Local $Test,疏忽了,下个版本会修正。谢谢前辈反馈。
发表于 2016-2-7 12:59:37 | 显示全部楼层
正则太复杂。版主厉害。
 楼主| 发表于 2016-2-7 13:47:35 | 显示全部楼层
本帖最后由 131738 于 2016-2-7 13:48 编辑
我居然没看懂...
一个@crlf 是正常换行,两个@crlf才有一个空行
afan 发表于 2016-2-7 12:53


我也不懂.........
只是模糊理认为:
比如实际的文本文件只有 2 个连续的文本行, 之间没有空行, 总行数是 2, 如果之间有一个空行, 那么这个文件的总行数就是 3 行了.

如果脚本代码将第一行文本后面设置有 2 个 @crlf, 消息框就显示这连续的 2 行文本之间多了一个空行, 有 3 行显示, 这就不是源文本文件的实际情况;

而如果第一行文本后面设置只有 1 个 @crlf, 消息框就显示这 2 行文本是连续的, 之间没有空行了, 只有 2 行显示.

现在要请教的主要问题就是:

如果修改表达式 (@@End@@)\b\r\n[\s|]*\r 使其有效


其它我也说不明白, 也不求一定要弄清楚..........
发表于 2016-2-7 13:48:49 | 显示全部楼层
我也不懂.........
只是模糊理认为:
比如实际的文本文件只有 2 个连续的文本行, 之间没有空行, 总行数 ...
131738 发表于 2016-2-7 13:47



    6楼修改了,再看看是不是这意思
发表于 2016-2-7 13:55:07 | 显示全部楼层
回复 10# 131738


    有两处 abcd 要改啊,莫非你的 abcd 是固定的?
Local $sSource = '@@End@@' & @CRLF & @CRLF & '123456'
Local $sK = '@@End@@'
If StringRegExp($sSource, $sK & '\h*\r\n\h*\r\n\h*(?=\V|$)') Then
        MsgBox(0, '含有空行', $sSource)
Else
        MsgBox(0, '未含空行', $sSource)
EndIf
 楼主| 发表于 2016-2-7 13:56:56 | 显示全部楼层
回复 9# afan

OK! 第一行文本替换为 @@End@@ , 六楼的代码 OK 了!
再次谢谢!!!!!
 楼主| 发表于 2016-2-7 14:01:52 | 显示全部楼层
本帖最后由 131738 于 2016-2-7 14:03 编辑
回复  131738


    有两处 abcd 要改啊,莫非你的 abcd 是固定的?
afan 发表于 2016-2-7 13:55

下面第一行是固定.
@@End@@
<strong>\R 匹 配</strong>
这个格式编译后的文档丢失文本 "\R 匹 配"
加一个空行才能不丢失文本, 4000 个文件需要检查这个情况/
发表于 2016-2-7 14:02:15 | 显示全部楼层
回复 11# 131738


    如果 @@End@@ 是固定的,那么就不需要提出 $sK 这个变量了,可以直接使用
Local $sSource = '@@End@@' & @CRLF & @CRLF & '123456'
If StringRegExp($sSource, '@@End@@\h*\r\n\h*\r\n\h*(?=\V|$)') Then
        MsgBox(0, '含有空行', $sSource)
Else
        MsgBox(0, '未含空行', $sSource)
EndIf
 楼主| 发表于 2016-2-7 14:04:11 | 显示全部楼层
回复  131738


    如果 @@End@@ 是固定的,那么就不需要提出 $sK 这个变量了,可以直接使用
afan 发表于 2016-2-7 14:02


ok 谢谢!!!
发表于 2016-2-7 14:05:15 | 显示全部楼层
回复 14# 131738


    不客气,解决就好,新年行大运!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 13:02 , Processed in 0.105557 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表