找回密码
 加入
搜索
查看: 1613|回复: 7

请问如果获取是文本第几行的问题

  [复制链接]
发表于 2010-1-8 14:22:25 | 显示全部楼层 |阅读模式
本帖最后由 jscpu 于 2010-1-8 14:53 编辑

我想获取文本里
第二种字符的上一行是第几行怎么获取!




11111111
11111
11
1111
11
111
1111
222
22

我想用FOR语句,只到最后一个开头是1的行数
请教如何获取!

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-1-8 14:51:24 | 显示全部楼层
回复 1# jscpu
Local $a = FileRead('1.txt'), $ss = '222'
$a = StringRegExp($a, '(?s).+(?=' & $ss & ')', 3)
If Not @Error Then $a = StringRegExpReplace($a[0], @CRLF, '')
MsgBox(0, 0, '关键字上一行为第 ' & @extended & ' 行')
 楼主| 发表于 2010-1-8 14:53:26 | 显示全部楼层
谢谢AFAN
发表于 2010-1-8 15:26:15 | 显示全部楼层
本帖最后由 afan 于 2010-1-8 15:35 编辑

回复 3# jscpu


    如果行数有几千上万,或者几万用以上的StringRegExpReplace方法是最快的。下面给个用循环的方法,不过用你说的For不合适
Local $a = FileOpen('1.txt', 0), $i = 1
While 1
        If FileReadLine($a) = '222' Then ExitLoop
        $i += 1
WEnd
MsgBox(0, 0, '关键字上一行为第 ' & $i - 1 & ' 行')
FileClose($a)
 楼主| 发表于 2010-1-8 17:03:30 | 显示全部楼层
回复 4# afan


  再请教下
假如    这个2不是第一位该怎么做呢  这个正则改怎么写

比如

123
1111
1111
1
11
1
dddd2-1
ffffffff2-2
就是发现第一个 2-   正则怎么写哈
先谢谢了!

测试发现还是
Local $a = FileRead('1.txt'), $ss = '222'
$a = StringRegExp($a, '(?s).+(?=' & $ss & ')', 3)
If Not @Error Then $a = StringRegExpReplace($a[0], @CRLF, '')
MsgBox(0, 0, '关键字上一行为第 ' & @extended & ' 行')
好用
下面一个会死循环
发表于 2010-1-8 17:12:27 | 显示全部楼层
回复 5# jscpu


    2#是用正则的方式,当然不会有问题
4#的循环方式没有使用正则,如果你的关键字不是整行那肯定会死循环
发表于 2010-1-8 17:25:08 | 显示全部楼层
加个正则判断即可,顺便补充完整,加个未搜索到则跳出循环:
Local $a = FileOpen('1.txt', 0), $i = 1, $sok = 0
While 1
        $hs = FileReadLine($a)
        If @error Then ExitLoop
        If StringRegExp($hs, '222') Then
                $sok = 1
                ExitLoop
        EndIf
        $i += 1
WEnd
FileClose($a)
If $sok = 1 Then MsgBox(0, 0, '关键字上一行为第 ' & $i - 1 & ' 行')
 楼主| 发表于 2010-1-8 18:14:49 | 显示全部楼层
再次感谢
!解决了!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2025-1-12 09:58 , Processed in 0.096518 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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