afan 发表于 2013-2-1 14:24:34

回复afan
afan 兄:你好!此代碼試還是一樣,同樣是運行后完成不了,卡在下面的地方就不動了。我使用的 ...
wenquan79 发表于 2013-2-1 14:01 http://www.autoitx.com/images/common/back.gif


    看不出什么问题。你可以直接执行au3文件看看。或者打包上传你的txt文档。
以下多加了个判断,如果全都有匹配则写空4.txtLocal $str1 = FileRead('1.txt')
Local $str2 = FileRead('2.txt')
$ts = TimerInit()
Local $aSR2 = StringRegExp($str2, '(\S+)\h+(\S+)', 3)
If @Error Then Exit
For $i = 0 To UBound($aSR2) - 1 Step 2
        Assign('~' & $aSR2[$i], $aSR2[$i + 1])
Next
Opt('ExpandVarStrings', 1)
$str1 = StringRegExpReplace($str1, '(?:\S+\h+\S+\h+)(\S+)', '$0      $~$1$')
Local $FO = FileOpen('3.txt', 2 + 8)
FileWrite($FO, $str1)
FileClose($FO)

If StringInStr($str1, '$~') Then
        Local $str4 = StringRegExpReplace($str1, '(?s).+?(\S+)\h+\$~.+?\$\h+.+?', '$1______')
        $str4 = StringRegExpReplace($str4, '(?s)______[^_]+$', '')
        $str4 = StringRegExpReplace($str4, '______', @CRLF)
Else
        Local $str4 = ''
EndIf
$FO = FileOpen('4.txt', 2 + 8)
FileWrite($FO, $str4)
FileClose($FO)
Msgbox(0, '完成耗时', Round(TimerDiff($ts)))

wenquan79 发表于 2013-2-1 15:04:32

回复 16# afan
afan 兄,你好!我是直接復制你的代碼來運行的,但還有這個問題,我看一下au3的版本是3.3.9.4,系統是繁體Win7 32位的。

-------
>"D:\autoit3\SciTe\ACNWrapper\ACNWrapper.exe" /run /ErrorStdOut /in "D:\autoit3\new\bb.au3" /autoit3dir "D:\autoit3" /UserParams   
+>15:03:18 ?﹍?︽ ACNWrapper v.1.0.1.7
+> ============================================
+>?︽?挂:
+>        CPU疼琜:        X64
+>        ╰?疼琜:        X86
+>        ╰??ē:        0404
+>        ??ガЫ:        E0200804
+>        ???秖:        4095MB
+>        ??逞?:        1676MB
+>        巨?╰?:        WIN_7
+>        AU3?セ:        3.3.9.4
+> ============================================
>?︽ AU3Check (3.3.9.5)?﹍ヘ?:D:\autoit3
+>15:03:18 AU3Check ЧΘ:0
>?︽:(3.3.9.4):D:\autoit3\autoit3.exe "D:\autoit3\new\bb.au3"

afan 发表于 2013-2-1 15:12:15

回复 17# wenquan79


    你这天书信息鬼才看得懂…
直接运行是指双击au3文件运行,不要在编辑器中运行…

wenquan79 发表于 2013-2-1 15:25:20

回复 18# afan
afan 兄:抱歉!因編輯器是簡體漢化的,而系統是繁體的,所以變亂碼了,本想將那運行環境及結果貼過來讓你了解一下,反而更亂了。
          不在編輯器中運行,直接雙擊運au3文件也這樣,我等下找一下臺簡體的系統試試看,謝謝!

afan 发表于 2013-2-1 16:23:15

回复 19# wenquan79

后面加的几行和上面的代码没有什么功能上的脚本区别,怎么加了就不行? 编译个试试~

wenquan79 发表于 2013-2-1 17:08:44

本帖最后由 wenquan79 于 2013-2-1 17:12 编辑

回复 20# afan
afan 兄:test.exe 在我這邊運行的結果與腳本的一樣,雙擊運行后,能產出3.txt,但一直不退出,CPU的使用率在50%左右,
         強行中止此程序CPU使用率恢復到正常的10%左右。謝謝!

afan 发表于 2013-2-1 18:54:45

回复 21# wenquan79


    现在只能怀疑你的文本文档了,精简一下你的“1.txt”,“2.txt”,可以重现问题即可,上传我再试试

wenquan79 发表于 2013-2-2 09:38:27

回复 22# afan
afan 兄:如你所說真的是文本的問題,我試了只要刪除文本1前2行就可以,文本我已上傳,你再幫忙看看,謝謝!

afan 发表于 2013-2-2 09:58:50

回复 23# wenquan79


    是的,用你上传的文件果真出现问题了。我看看先

afan 发表于 2013-2-2 10:30:43

Local $str1 = FileRead('1.txt')
Local $str2 = FileRead('2.txt')
$ts = TimerInit()
Local $aSR2 = StringRegExp($str2, '(\S+)\h+(\S+)', 3)
If @Error Then Exit
For $i = 0 To UBound($aSR2) - 1 Step 2
        Assign('~' & $aSR2[$i], $aSR2[$i + 1])
Next
Opt('ExpandVarStrings', 1)
$str1 = StringRegExpReplace($str1, '(?:\S+\h+\S+\h+)(\S+)', '$0      $~$1$')
Local $FO = FileOpen('3.txt', 2 + 8)
FileWrite($FO, $str1)
FileClose($FO)

Local $aSR = StringRegExp($str1, '(\S+)\h+\$~.+?\$', 3), $str4 = ''
If Not @Error Then
        For $i = 0 To UBound($aSR) - 1
                $str4 &= $aSR[$i] & @CRLF
        Next
EndIf
$FO = FileOpen('4.txt', 2 + 8)
FileWrite($FO, $str4)
FileClose($FO)
Msgbox(0, '完成耗时', Round(TimerDiff($ts)))

wenquan79 发表于 2013-2-2 10:45:56

回复 25# afan
afan 兄:新的代碼經測試沒問題了,神速!我知道這表達式的東西很難懂,解釋起來也很深奧,但還是想麻煩兄費時幫忙解說一下,謝謝!

jojomecool 发表于 2013-2-4 15:12:00

afan果然厉害

xms77 发表于 2013-2-5 15:49:00

回复 4# afan
A大,怎么解析'$~$1$',研究了半天没有明白{:face (461):}

whitehead 发表于 2013-2-5 18:19:55

回复 28# xms77

同问
页: 1 [2]
查看完整版本: [已解]文本處理--將1文本的特定內容插到另文本指定位置中.