流沙枫 发表于 2012-3-22 08:45:15

文本有条件剪切.... [已解决]

本帖最后由 流沙枫 于 2012-3-22 14:46 编辑

addcaller-id="" comment="\B1\D5\CE\B0\C0\BCm"    disabled=yes name=201107 password=201107         profile=default routes="" service=pppoe                                                                              
addcaller-id="" comment="\B1\D5\D1\DE\D5\E4"   disabled=yes name=200902 password=200902          profile=default routes="" service=pppoe                                                                              
addcaller-id="" comment="\B1\F6\D6\F9\C3\F7m"    disabled=yes name=201002 password=201002         profile=default routes=""
service=pppoe


把name=2011的行剪切出来,再按升序排列?

name=201101
name=201102
不好意思了,又遇到难题,再次求助各位大大.....

流沙枫 发表于 2012-3-22 10:01:12

Local $sFile1 = @ScriptDir & '\test2011.rsc'
Local $sFile2 = @ScriptDir & '\2test2011.rsc'
Local $Str = FileRead($sFile1)
Local $scut = StringRegExp($str, '(?i)(.+\s+.+name=\h*(2011.+?)\h*\2')
If Not @Error And @Extended = 0 Then Exit MsgBox(48, '注意', '没 ')
Local $Extended = @Extended
FileDelete($sFile1)
If FileWrite($sFile1, $scut) Then MsgBox(64, '完成', '成功 ' & $Extended & ' 处 ')改不出....

user3000 发表于 2012-3-22 10:29:09

试试? 不知大文件的效率如何?
但应该工作正常罢!#include <array.au3>

$txt = FileRead('d:\new.rsc')
$line = StringRegExp($txt, '.+name=2011\d{2}.+', 3)
If @error Then Exit
$s = UBound($line)
Local $index[$s]
For $i = 0 To $s -1
        $Lable = StringRegExpReplace($line[$i], '.+(name=\d{6}).+', '\1') ; 提取关键字作为排列依据
        $index[$i] = $Lable
Next
_ArraySort($index); 排列关键字
Local $str = ''
For $i = 0 To $s -1
        For $ii = 0 To $s -1
        If StringRegExp($line[$ii], $index[$i]) Then $str &= $line[$ii] & @CRLF ; 按关键字重组所胡字符串
Next
Next
FileWrite('d:\2011.rsc', $str)

流沙枫 发表于 2012-3-22 10:40:18

回复 3# user3000 #include <array.au3>

Local $sFile1 = @ScriptDir & '\test2011.rsc'
Local $sFile2 = @ScriptDir & '\2test2011.rsc'
$line = StringRegExp($sFile1, '.+name=2011\d{2}.+', 3)
If @error Then Exit
$s = UBound($line)
Local $index[$s]
For $i = 0 To $s -1
      $Lable = StringRegExpReplace($line[$i], '.+(name=\d{6}).+', '\1') ; 提取关键字作为排列依据
      $index[$i] = $Lable
Next
_ArraySort($index); 排列关键字
Local $str = ''
For $i = 0 To $s -1
      For $ii = 0 To $s -1
      If StringRegExp($line[$ii], $index[$i]) Then $str &= $line[$ii] & @CRLF ; 按关键字重组所胡字符串
Next
Next
FileWrite($sFile2, $str)修改了下,无效的?

user3000 发表于 2012-3-22 10:52:02

回复user3000 修改了下,无效的?
流沙枫 发表于 2012-3-22 10:40 http://www.autoitx.com/images/common/back.gif


    我...R..I...
你读文件的代码呢?

流沙枫 发表于 2012-3-22 11:02:02

回复 5# user3000


    Local $Str = FileRead($sFile1)?
加这行?
也不行呢.....

流沙枫 发表于 2012-3-22 11:05:43

回复 3# user3000


    用回这个也行了.....

user3000 发表于 2012-3-22 11:10:15

回复user3000


    用回这个也行了.....
流沙枫 发表于 2012-3-22 11:05 http://www.autoitx.com/images/common/back.gif
把文件上传上来吧.
太大就截取一部分..
或者自己加 msgBox 等看看是不是正则工作不正常!

流沙枫 发表于 2012-3-22 11:10:35

回复 2# 流沙枫


   Array variable subscript badly formatted.:
Local $index[$s]
Local $index[^ ERROR

流沙枫 发表于 2012-3-22 11:14:46

回复 8# user3000


    都是和上面三行差不多的,数据不用都上传吧?

user3000 发表于 2012-3-22 11:21:54

本帖最后由 user3000 于 2012-3-22 11:25 编辑

回复user3000


    都是和上面三行差不多的,数据不用都上传吧?
流沙枫 发表于 2012-3-22 11:14 http://www.autoitx.com/images/common/back.gif

这是我测试成功的数据...
运行环境:AutoIt v3.3.7.15 (beta)中文版
那你自己对比, 慢慢找原因吧

流沙枫 发表于 2012-3-22 11:57:12

回复 11# user3000


    真的可以了,原来是改错代码了,不好意思啊,谢谢啊.....

流沙枫 发表于 2012-3-22 14:30:33

本帖最后由 流沙枫 于 2012-3-22 14:45 编辑

回复 11# user3000


3 返回全局匹配的数组.

原来是没好好学习,sorry了....
页: [1]
查看完整版本: 文本有条件剪切.... [已解决]