找回密码
 加入
搜索
查看: 1936|回复: 6

请教字符串操作

[复制链接]
发表于 2008-10-25 12:32:18 | 显示全部楼层 |阅读模式
有一个记事本,内容如下:
10                Displ. Reaction                                               
        3  (OPE)                -3                 0               108             610.5             138.9             -96.7       
        MAX                 3/ 3                 0/ 3               108/ 3             610.5/ 3             138.9/ 3              96.7/ 3       
                                                               
45                Prog Design  VSH                                               
        3  (OPE)                 0                 0              -538               0.0               0.0               0.0       
        MAX                 0/ 3                 0/ 3               538/ 3               0.0/ 3               0.0/ 3               0.0/ 3       

需要进行如下操作:
1.去掉行与行之间的空格行;
2.对于数字后面跟不带括号的字母的,中间的空格不变;
3.空格之间用逗号隔开,但是数字和带括号的字符直接的空格不变;
4.字母与数字之间的空格用逗号隔开,但是/与数字之间的空格不变。

上述处理完应为:
10              Displ. Reaction                                               
        3  (OPE), -3,0,108,610.5,138.9, -96.7       
        MAX,3/ 3, 0/ 3,108/ 3,610.5/ 3,138.9/ 3,96.7/ 3       
45                Prog Design  VSH                                               
        3  (OPE), 0, 0, -538, 0.0, 0.0,0.0       
        MAX,0/ 3, 0/ 3, 538/ 3        ,0.0/ 3,0.0/ 3,0.0/ 3       

应如何操作呢,请各位指教

[ 本帖最后由 jchang 于 2008-10-28 17:40 编辑 ]
 楼主| 发表于 2008-10-27 08:13:02 | 显示全部楼层
先请问如何删掉记事本中的空行?
发表于 2008-10-27 11:31:04 | 显示全部楼层
消除空行:

While 1
  $File = FileReadLine('XXX.txt', $i)
    If @error = -1 then
        exit
    Else
        If $File = '' Then ContinueLoop
    EndIf
    FileWriteLine('xxx.txt', $File)
Wend
 楼主| 发表于 2008-10-27 12:19:35 | 显示全部楼层
多谢指点!我用正则表达式也基本达到了要求,主要语句如下:
$line1 = StringRegExpReplace($line1," {1,}\(", "\(")
        $line2=$line1
        $line2 = StringRegExpReplace($line2,"^\s+", "")
        $text=$line2
        $text = StringRegExpReplace($text, "/ {1,}", "/")
        $numreplacements = $text
    $text = StringRegExpReplace($numreplacements, "\s+", ",")
发表于 2008-10-27 13:11:35 | 显示全部楼层

Local $show = '', $i = 0

While 1
        $offset = 1
        $i += 1
        $String = FileReadLine('test.txt', $i)
    If @error = -1 then ExitLoop
        $File = StringRegExp($String, '^\d{2}\s+.+', 2, 1)
        If @error = 0 Then
                $show &= $File[0] & @CRLF
                ContinueLoop
        EndIf
        $File = StringRegExp($String, '^.+\)', 2, 1)
        If @error = 0 Then
                $show &= $File[0] & ','
                StringReplace($String, $File[0], '')
        EndIf
        $File = StringRegExp($String, '^\s+MAX', 2, 1)
        If @error = 0 Then
                $show &= $File[0] & ','
                StringReplace($String, $File[0], '')
        EndIf
        Do
                $File = StringRegExp($String, '\s+(-?\d+\.?\d?/?\s+?\d?+)', 1, $offset)
                If @error = 0 Then
                        $offset = @extended
                        $show &= $File[0] & ','
                Else
                        $show = StringTrimRight($show, 1)
                        $show &= @CRLF
                        ExitLoop
                EndIf
        Until 0
Wend
MsgBox(0,'',$show)
 楼主| 发表于 2008-10-27 17:02:44 | 显示全部楼层
多谢楼上的脚本,基本实现了所有的功能,不过
45                Prog Design  VSH     
这行执行后好像只显示45,另外能否解释下StringRegExp的用法呢!
发表于 2008-10-27 20:42:00 | 显示全部楼层
原帖由 jchang 于 2008-10-27 17:02 发表
多谢楼上的脚本,基本实现了所有的功能,不过
45                Prog Design  VSH     
这行执行后好像只显示45,另外能否解释下StringRegExp的用法呢!

按你贴出来的那个样式,是能正确显示的!如果有不正确的显示,按实际情况修改!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-10 16:52 , Processed in 0.078968 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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