文本处理问题请教
有类似如下的文本:aabbcd
bdcg
dfdfdfdf10
10 abc
bdcg
12 df
dfdfdfdf10
ABC
def
fh
现要求在文本中提取第一次出现以数字(也可能是空白+数字)开头的行到出现有ABC字母之间的所有行:
10 abc
bdcg
12 df
dfdfdfdf10
请问应如何做呢?
[ 本帖最后由 jchang 于 2008-11-24 12:37 编辑 ] 再说明白点
$i = 1
Do
$fileline = FileReadLine('1.txt', $i)
If @error = -1 Then Exit
$T = stringregexp($fileline, '^[ *\d*].+', 2, 1)
If @error = 0 Then MsgBox(0,'',$T)
$i += 1
Until 0
可能原来没讲清楚,现换种方式说一下,就是在一个文本文档中取出指定的几行,取出的几行第一行是数字开头的行,也是文本中最先出现以数字开头的行,最末一行是ABC, 例子一:
dfdfdfdf10
10 abc
bdcg
......
12 df
dfdfdfdf10
ABC
def
取出的行为:
10 abc
bdcg
......
12 df
dfdfdfdf10
ABC
例子二:
bdcg
abc34333df
12 dcef
......
12 dc
ABC
def
fh
取出的几行为:
12 dcef
......
12 dc
ABC
不知说清楚了没有,请大家指教
[ 本帖最后由 jchang 于 2008-11-22 23:14 编辑 ] 每行读取,然后用正则匹配出现数字的第一行,记录下这一行的行号,再往下用正则匹配出现数字的行,出现匹配行就记下行号,然后用正则匹配下一行是不是ABC?如果是,就重新读取第一次出现的行号,把这一行往下的都写入文件里;如果不是,就从判断不是ABC的上一行开始往下匹配数字,直到出现下一个数字,判断是不是ABC,重复就行啦!
上面这个是最笨的办法,啦啦!
好办法当然是用正则直接分,可惜偶不会~ 楼上说的对我来说有几个难点,第一个是查找以数字开头的行,这个我用正则表达式可以完成,但是如何查找出现数字的第一行呢?又如何记下行号呢?我有如下的代码,但是只能查找以数字开头的行:
$file2 = FileOpen("test.txt", 0)
If $file2 = -1 Then
MsgBox(0, "错误", "不能打开文件.")
Exit
EndIf
$i=1
While 1
$line2 = FileReadLine($file2)
If @error = -1 Then ExitLoop
$T = stringregexp($line2, '^[\d*].*', 2, 1)
If @error = 0 Then MsgBox(0,'',$T)
Wend $file2 = FileOpen("test.txt", 0)
If $file2 = -1 Then
MsgBox(0, "错误", "不能打开文件.")
Exit
EndIf
$i=1
While 1
$line2 = FileRead($file2)
If @error = -1 Then ExitLoop
$T = stringregexp($line2, '\d+(.*\s*)+ABC', 2)
If @errorThen
MsgBox(0,'',"X")
Else
MsgBox(0,'',$T)
EndIf
Wend ;more exactly
stringregexp($line2, '\r\s*(\d+)(.*\s*)+?ABC\s*\r', 2) 多谢,已能满足要求
页:
[1]