131738 发表于 2016-2-6 15:42:12

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

本帖最后由 131738 于 2016-2-7 14:05 编辑

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

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

123456谢谢!!!

131738 发表于 2016-2-6 19:00:42

顶起................................

afan 发表于 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)

131738 发表于 2016-2-6 22:37:34


afan 发表于 2016-2-6 19:02 http://www.autoitx.com/images/common/back.gif

谢谢,我明天编脚本试试...............

131738 发表于 2016-2-7 11:21:25

本帖最后由 131738 于 2016-2-7 11:43 编辑


afan 发表于 2016-2-6 19:02 http://www.autoitx.com/images/common/back.gif

没有效果, 你的文本变量 $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 测试, 还是出现这个问题.

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

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

afan 发表于 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,疏忽了,下个版本会修正。谢谢前辈反馈。

king8462 发表于 2016-2-7 12:59:37

正则太复杂。版主厉害。

131738 发表于 2016-2-7 13:47:35

本帖最后由 131738 于 2016-2-7 13:48 编辑

我居然没看懂...
一个@crlf 是正常换行,两个@crlf才有一个空行
afan 发表于 2016-2-7 12:53 http://www.autoitx.com/images/common/back.gif

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

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

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

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

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

其它我也说不明白, 也不求一定要弄清楚..........

afan 发表于 2016-2-7 13:48:49

我也不懂.........
只是模糊理认为:
比如实际的文本文件只有 2 个连续的文本行, 之间没有空行, 总行数 ...
131738 发表于 2016-2-7 13:47 http://www.autoitx.com/images/common/back.gif


    6楼修改了,再看看是不是这意思

afan 发表于 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

131738 发表于 2016-2-7 13:56:56

回复 9# afan

OK! 第一行文本替换为 @@End@@ , 六楼的代码 OK 了!
再次谢谢!!!!!

131738 发表于 2016-2-7 14:01:52

本帖最后由 131738 于 2016-2-7 14:03 编辑

回复131738


    有两处 abcd 要改啊,莫非你的 abcd 是固定的?
afan 发表于 2016-2-7 13:55 http://www.autoitx.com/images/common/back.gif
下面第一行是固定.@@End@@
<strong>\R 匹 配</strong>这个格式编译后的文档丢失文本 "\R 匹 配"
加一个空行才能不丢失文本, 4000 个文件需要检查这个情况/

afan 发表于 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

131738 发表于 2016-2-7 14:04:11

回复131738


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

ok 谢谢!!!

afan 发表于 2016-2-7 14:05:15

回复 14# 131738


    不客气,解决就好,新年行大运!
页: [1] 2
查看完整版本: [已解决]如果检测指定了行文本字符串的下一行是否为空行