jchang 发表于 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 DesignVSH                                               
        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 DesignVSH                                               
        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 编辑 ]

jchang 发表于 2008-10-27 08:13:02

先请问如何删掉记事本中的空行?

liongodmien 发表于 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

jchang 发表于 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+", ",")

liongodmien 发表于 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 & @CRLF
                ContinueLoop
        EndIf
        $File = StringRegExp($String, '^.+\)', 2, 1)
        If @error = 0 Then
                $show &= $File & ','
                StringReplace($String, $File, '')
        EndIf
        $File = StringRegExp($String, '^\s+MAX', 2, 1)
        If @error = 0 Then
                $show &= $File & ','
                StringReplace($String, $File, '')
        EndIf
        Do
                $File = StringRegExp($String, '\s+(-?\d+\.?\d?/?\s+?\d?+)', 1, $offset)
                If @error = 0 Then
                        $offset = @extended
                        $show &= $File & ','
                Else
                        $show = StringTrimRight($show, 1)
                        $show &= @CRLF
                        ExitLoop
                EndIf
        Until 0
Wend
MsgBox(0,'',$show)

jchang 发表于 2008-10-27 17:02:44

多谢楼上的脚本,基本实现了所有的功能,不过
45                Prog DesignVSH   
这行执行后好像只显示45,另外能否解释下StringRegExp的用法呢!

liongodmien 发表于 2008-10-27 20:42:00

原帖由 jchang 于 2008-10-27 17:02 发表 http://www.autoitx.com/images/common/back.gif
多谢楼上的脚本,基本实现了所有的功能,不过
45                Prog DesignVSH   
这行执行后好像只显示45,另外能否解释下StringRegExp的用法呢!
按你贴出来的那个样式,是能正确显示的!如果有不正确的显示,按实际情况修改!
页: [1]
查看完整版本: 请教字符串操作