找回密码
 加入
搜索
查看: 2069|回复: 8

文本处理问题请教

[复制链接]
发表于 2008-11-22 11:39:01 | 显示全部楼层 |阅读模式
有类似如下的文本:
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 编辑 ]
发表于 2008-11-22 12:59:15 | 显示全部楼层
再说明白点
发表于 2008-11-22 13:44:01 | 显示全部楼层

$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[0])
$i += 1
Until 0
 楼主| 发表于 2008-11-22 22:53:34 | 显示全部楼层
可能原来没讲清楚,现换种方式说一下,就是在一个文本文档中取出指定的几行,取出的几行第一行是数字开头的行,也是文本中最先出现以数字开头的行,最末一行是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 编辑 ]
发表于 2008-11-22 23:55:47 | 显示全部楼层
每行读取,然后用正则匹配出现数字的第一行,记录下这一行的行号,再往下用正则匹配出现数字的行,出现匹配行就记下行号,然后用正则匹配下一行是不是ABC?如果是,就重新读取第一次出现的行号,把这一行往下的都写入文件里;如果不是,就从判断不是ABC的上一行开始往下匹配数字,直到出现下一个数字,判断是不是ABC,重复就行啦!

上面这个是最笨的办法,啦啦!

好办法当然是用正则直接分,可惜偶不会~
 楼主| 发表于 2008-11-23 22:02:56 | 显示全部楼层
楼上说的对我来说有几个难点,第一个是查找以数字开头的行,这个我用正则表达式可以完成,但是如何查找出现数字的第一行呢?又如何记下行号呢?我有如下的代码,但是只能查找以数字开头的行:
$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[0])
Wend
发表于 2008-11-23 22:54:28 | 显示全部楼层
$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 @error  Then 
MsgBox(0,'',"X")
Else
        MsgBox(0,'',$T[0])
EndIf
Wend
发表于 2008-11-24 07:17:25 | 显示全部楼层
;more exactly
stringregexp($line2, '\r\s*(\d+)(.*\s*)+?ABC\s*\r', 2)
 楼主| 发表于 2008-11-24 12:37:01 | 显示全部楼层
多谢,已能满足要求
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-17 20:05 , Processed in 0.081722 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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