请问如果获取是文本第几行的问题
本帖最后由 jscpu 于 2010-1-8 14:53 编辑我想获取文本里
第二种字符的上一行是第几行怎么获取!
如
11111111
11111
11
1111
11
111
1111
222
22
我想用FOR语句,只到最后一个开头是1的行数
请教如何获取! 回复 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 & ' 行') 谢谢AFAN:face (14): 本帖最后由 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) 回复 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 & ' 行')
好用
下面一个会死循环 回复 5# jscpu
2#是用正则的方式,当然不会有问题
4#的循环方式没有使用正则,如果你的关键字不是整行那肯定会死循环 加个正则判断即可,顺便补充完整,加个未搜索到则跳出循环: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 & ' 行') 再次感谢
!解决了!
页:
[1]