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

[效率算法] txt格式问题?一个正则问题求助(已解决)

  [复制链接]
发表于 2011-7-6 23:20:16 | 显示全部楼层 |阅读模式
本帖最后由 papapa314 于 2011-7-7 19:08 编辑

各位好,我将3.txt(见附件)的文本复制到afan的正则测试助手里可以获得如下结果

但是很奇怪的是,我用如下代码,却得不到同样的结果
#include<array.au3>

$text=FileRead(@ScriptDir&"\3.txt")

$contents=StringRegExp($text,'(?s)(.+?)"\r',3)

_ArrayDisplay($contents)

结果为

请问这个是不是txt格式的问题,应该如何解决这个问题呢?
多谢各位。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-7-6 23:35:54 | 显示全部楼层
校园网上论坛极为痛苦,尤其是发帖,搞了十几分钟没发好,各位请见谅。
发表于 2011-7-7 08:23:36 | 显示全部楼层
本帖最后由 pcbar 于 2011-7-7 08:27 编辑

不太明白楼主要做什么 ,是提取文字标题就这样
#include<array.au3>
$text=FileRead(@ScriptDir&"\3.txt")
$text=StringReplace($text,"<BR>","")
$contents=StringRegExp($text,'\[[^\[]+',3)
_ArrayDisplay($contents)

评分

参与人数 1金钱 +10 收起 理由
papapa314 + 10

查看全部评分

发表于 2011-7-7 08:41:45 | 显示全部楼层
楼主的意思是以换行符为分隔符分割文本吗?

评分

参与人数 1金钱 +10 收起 理由
papapa314 + 10 谢谢关注

查看全部评分

 楼主| 发表于 2011-7-7 10:15:44 | 显示全部楼层
回复 3# pcbar


    谢谢pcbar老大。我的目的是要把"\r和"\r之间的文本提取出来,用afan的正则测试工具可以看到提取出4项结果,但用arraydisplay却只看到1项结果。后来仔细看了下,发现如果文本开头有\r的项arraydisplay无法显示出来,但用一个循环可以照常提取。问题就出在这里了。
 楼主| 发表于 2011-7-7 10:24:00 | 显示全部楼层
回复 3# pcbar


我是用如下代码提取文档内容以及文件名,效果是不错的,但就是效率比较低,速度很慢,特别是3.txt文件很大的时候,不知道有改进的办法没有?    谢谢pcbar老大。

          $contents=StringRegExp(FileRead(@ScriptDir&"\3.txt"),'(?s)(.+?)"\r',3)
       
               $num=UBound($contents)
       
        $dir=@ScriptDir&"\"&@HOUR&"时"&@MIN&"分提取"
       
        DirCreate($dir)
       
        For $i=0 To $num-1
                TrayTip("提示","共有"&$num&"个文档等待提取,目前正在提取第"&$i&"个",5)
                $title=StringRegExp($contents[$i],"(.+?)\|",3)
                FileWrite($dir&"\"&$title[0]&".txt",$contents[$i])
                _ReplaceStringInFile(@ScriptDir&"\"&$dir&"\"&$title[0]&".txt","<BR>",@CRLF)
        Next

        TrayTip("提示","提取完毕,文档保存程序目录下"&$dir&"文件夹中",50)
发表于 2011-7-7 17:15:56 | 显示全部楼层
回复 6# papapa314
;$contents = StringRegExp(FileRead(@ScriptDir & "\3.txt"), '(?s)(.+?)"\r', 3)
$contents=StringSplit(FileRead(@ScriptDir & "\3.txt"),'"'&@CRLF,3)

$num = UBound($contents)
$dir = @ScriptDir & "\" & @HOUR & "时" & @MIN & "分提取"
DirCreate($dir)
For $i = 0 To $num - 1
        TrayTip("提示", "共有" & $num & "个文档等待提取,目前正在提取第" & $i & "个", 5)
        $title = StringRegExp($contents[$i], "(?m)^.*?(?=\|)", 3)
        FileWrite($dir & "\" & $title[0] & ".txt", StringReplace($contents[$i],"<BR>",@CRLF))
        ;_ReplaceStringInFile(@ScriptDir & "\" & $dir & "\" & $title[0] & ".txt", "<BR>", @CRLF)
Next

TrayTip("提示", "提取完毕,文档保存程序目录下" & $dir & "文件夹中", 50)

评分

参与人数 1金钱 +10 收起 理由
papapa314 + 10 又一次得到你的帮忙啦!

查看全部评分

发表于 2011-7-7 17:16:50 | 显示全部楼层
顶楼上
标记
 楼主| 发表于 2011-7-7 19:08:00 | 显示全部楼层
回复 7# 3mile


    呵呵,多谢向阳坊大哥,原来速度最慢的一步是 _ReplaceStringInFile(@ScriptDir & "\" & $dir & "\" & $title[0] & ".txt", "<BR>", @CRLF),应该在写入txt文件之前前直接替换掉<BR>.
其他的StringRegExp跟stringreplace执行起来速度差别不是太大。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-21 00:20 , Processed in 0.085018 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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