jscpu 发表于 2010-1-8 14:22:25

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

本帖最后由 jscpu 于 2010-1-8 14:53 编辑

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




11111111
11111
11
1111
11
111
1111
222
22

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

afan 发表于 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, @CRLF, '')
MsgBox(0, 0, '关键字上一行为第 ' & @extended & ' 行')

jscpu 发表于 2010-1-8 14:53:26

谢谢AFAN:face (14):

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)

jscpu 发表于 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, @CRLF, '')
MsgBox(0, 0, '关键字上一行为第 ' & @extended & ' 行')
好用
下面一个会死循环

afan 发表于 2010-1-8 17:12:27

回复 5# jscpu


    2#是用正则的方式,当然不会有问题
4#的循环方式没有使用正则,如果你的关键字不是整行那肯定会死循环

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

jscpu 发表于 2010-1-8 18:14:49

再次感谢
!解决了!
页: [1]
查看完整版本: 请问如果获取是文本第几行的问题