找回密码
 加入
搜索
查看: 3810|回复: 9

[AU3基础] 正则表达式提示出错问题请教

  [复制链接]
发表于 2010-4-10 11:51:59 | 显示全部楼层 |阅读模式
本帖最后由 jchang 于 2010-4-10 13:17 编辑

从文本中提取出第一个是数字的行,例如文本:
HIGHEST STRESSES: (   KPa    )                                                
    CODE STRESS %:             53.2  @NODE  760                                 
           STRESS:          49288.9  ALLOWABLE:    92591.                                       
    3D MAX INTENSITY:      103640.4  @NODE  389                                 
                                                                                
    10      20022      8733       419     44962     1.00   1.00     28847   132302
    190    19563      4315       365     45987     3.01   3.01     23645   132302
                                                                                
BENDING STRESS:         48710.7  @NODE  190                                 
    TORSIONAL STRESS:        4142.0  @NODE 2199                                 
    AXIAL STRESS:           41473.2  @NODE 4100   
提取出如下两行:
    10      20022      8733       419     44962     1.00   1.00     28847   132302
    190    19563      4315       365     45987     3.01   3.01     23645   132302

我的脚本如下:
#include <File.au3>
#include<array.au3>
Global $x
If $cmdline[0] = 1 Then
        $x = $cmdline[1]
EndIf

$file2 = FileOpen(FileGetLongName($x), 0)
If $file2 = -1 Then
        MsgBox(0, "错误", "不能打开文件.")
        Exit
EndIf

FileDelete(@ScriptDir & "\输出.txt")
$file3 = FileOpen(@ScriptDir & "\输出.txt", 2)
If $file3 = -1 Then
        MsgBox(0, "错误", "不能打开文件.")
        Exit
EndIf

While 1
$line2 = FileReadLine($file2)
If @error = -1 Then ExitLoop
$T = stringregexp($line2, '\s+\d{2,3,4}.*\n', 2,1)
If @error  Then
MsgBox(0,'',"提取出错")
Else
        FileWriteLine($file3,$T[0])
EndIf
Wend

FileClose($file2)
FileClose($file3)

以上脚本在执行过程中为何屡屡弹出“提取出错”的对话框呢?
发表于 2010-4-10 12:10:43 | 显示全部楼层
本帖最后由 nmgwddj 于 2010-4-10 12:13 编辑

固定行数吗固定行数我就帮你搞定
嘿嘿。开个玩笑。
如果我没想错的话。你正则前边应该加个.+\n
我不会 瞎说的 等高手来
发表于 2010-4-10 13:48:40 | 显示全部楼层
#include <Array.au3>
$Str = _
                'HIGHEST STRESSES: (   KPa    )                                                 ' & @CRLF & _
                '    CODE STRESS %:             53.2  @NODE  760                                 ' & @CRLF & _
                '           STRESS:          49288.9  ALLOWABLE:    92591.                                        ' & @CRLF & _
                '    3D MAX INTENSITY:      103640.4  @NODE  389                                 ' & @CRLF & _
                '                                                                                ' & @CRLF & _
                '    10      20022      8733       419     44962     1.00   1.00     28847   132302' & @CRLF & _
                '    190    19563      4315       365     45987     3.01   3.01     23645   132302' & @CRLF & _
                '                                                                                ' & @CRLF & _
                'BENDING STRESS:         48710.7  @NODE  190                                 ' & @CRLF & _
                '    TORSIONAL STRESS:        4142.0  @NODE 2199                                 ' & @CRLF & _
                '    AXIAL STRESS:           41473.2  @NODE 4100'
;Msgbox(0, '原字符串', $str)
$sR = StringRegExp($str, '\n(\h+\d+\s.+)', 3)
_ArrayDisplay($sR, '')

评分

参与人数 1金钱 +20 收起 理由
水木子 + 20 我也刚刚写好!算了,就不发上来了。

查看全部评分

发表于 2010-4-10 13:55:35 | 显示全部楼层
本帖最后由 水木子 于 2010-4-10 13:56 编辑

前辈确实厉害,匹配结果完全符合LZ的要求。
    10      20022      8733       419     44962     1.00   1.00     28847   132302
    190    19563      4315       365     45987     3.01   3.01     23645   132302

不过我一点疑问,从文本中提取出第一个是数字的行
3D MAX INTENSITY:      103640.4  @NODE  389    ;这一行应该也算吧?

不知道是不是我理解错了。
发表于 2010-4-10 13:57:44 | 显示全部楼层
回复 4# 水木子


    按他的意思,是要纯数字串,不带字母打隔壁的
发表于 2010-4-10 13:59:50 | 显示全部楼层
本帖最后由 水木子 于 2010-4-10 14:01 编辑

哦!那是我理解错了,我以为是匹配以数字开头的行。
所以我写的匹配结果中有这一行   3D MAX INTENSITY:      103640.4  @NODE  389

谢谢前辈指教,学习啦!
 楼主| 发表于 2010-4-10 14:21:02 | 显示全部楼层
多谢各位啦,收益匪浅
 楼主| 发表于 2010-4-10 18:54:50 | 显示全部楼层
请问如何写入文本呢?
发表于 2010-4-10 22:30:40 | 显示全部楼层
这还不简单 FileWrite
发表于 2010-4-12 10:01:17 | 显示全部楼层
有点看不懂。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 15:18 , Processed in 0.093008 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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