史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   如何寫一個批次取代修改文件中的文字 (http://forum.slime.com.tw/thread256150.html)

sagalee 2010-01-14 01:38 PM

如何寫一個批次取代修改文件中的文字
 
小弟有一個問題想問各位高手
我有一個文字檔
想把裡面一個特定的字依序取代掉
例如:
caseD-1-00001-->caseD-1-00002
caseD-1-00001-->caseD-1-00003
caseD-1-00001-->caseD-1-00004
caseD-1-00001-->caseD-1-00005

紅色的字取代成藍色的字
我知道word有取代功能
但是他只能取代成同樣的文字
不能依序更換取代的文字
想請問各位高手
有什麼方法可以解決
感謝!!!

pedrowong 2010-01-14 10:16 PM

請問:
1.文件檔中的替代文字位置是否固定?
2.文件檔行數是否固定?
3.可否貼一段(幾行)實際字串範例?

一般來說,批次檔需叫出背景編輯軟體才能自動將
文件檔中的文字替代為另一文字。因此除需準備背
景編輯軟體外,另需準備背景編輯軟體的編輯描述
檔。

下載Editor軟體,該軟體提供不少編輯指令,看是否
滿足需求。
http://www.4shared.com/file/13333482...84/Editor.html

sagalee 2010-01-18 10:22 AM

感謝大大的回覆
我在對我要處理的文件做個詳細說明
1.文件檔中的替代文字位置是否固定?
Ans:固定的
2.文件檔行數是否固定?
Ans:固定的
我要處理的文件是一個程式的指令,因為有很多case重複同樣動作
所以只須修改指令中的case名稱,就可以連續執行,省下不少時間
下面是我貼出2大段的指令
(cx-gui-do cx-activate-item "MenuBar*ReadSubMenu*Case & Data...")
(cx-gui-do cx-set-text-entry "Select File*FilterText" "e:\fluent-case & data\paper\vibrating-plate-vertical-channel\2d-case\cased\cased-1\dm\*")
(cx-gui-do cx-activate-item "Select File*Apply")
(cx-gui-do cx-set-text-entry "Select File*Text" "caseD-1-DM-1-00661.cas")
(cx-gui-do cx-activate-item "Select File*OK")
(cx-gui-do cx-activate-item "NavigationPane*Frame1*PushButton19(Graphics and Animations)")
(cx-gui-do cx-activate-item "Graphics and Animations*Frame1*Table1*Frame7*ButtonBox7*PushButton1(Options)")
(cx-gui-do cx-set-toggle-button "Display Options*Frame4(Layout)*CheckButton1(Titles)" #t)
(cx-gui-do cx-activate-item "Display Options*Frame4(Layout)*CheckButton1(Titles)")
(cx-gui-do cx-set-list-selections "Display Options*Frame4(Layout)*DropDownList5(Colormap Alignment)" '( 3))
(cx-gui-do cx-activate-item "Display Options*Frame4(Layout)*DropDownList5(Colormap Alignment)")
(cx-gui-do cx-activate-item "Display Options*PanelButtons*PushButton1(Apply)")
(cx-gui-do cx-activate-item "Display Options*PanelButtons*PushButton2(Close)")
(cx-gui-do cx-activate-item "MenuBar*DisplayMenu*Views...")
(cx-gui-do cx-activate-item "Views*Frame2(Actions)*ButtonBox2(Actions)*PushButton6(Read)")
(cx-gui-do cx-set-text-entry "Select File*FilterText" "e:\fluent-case & data\paper\vibrating-plate-vertical-channel\2d-case\cased\*")
(cx-gui-do cx-activate-item "Select File*Apply")

(cx-gui-do cx-activate-item "MenuBar*ReadSubMenu*Case & Data...")
(cx-gui-do cx-set-text-entry "Select File*FilterText" "e:\fluent-case & data\paper\vibrating-plate-vertical-channel\2d-case\cased\cased-1\dm\*")
(cx-gui-do cx-activate-item "Select File*Apply")
(cx-gui-do cx-set-text-entry "Select File*Text" "caseD-1-DM-1-00661.cas")
(cx-gui-do cx-activate-item "Select File*OK")
(cx-gui-do cx-activate-item "NavigationPane*Frame1*PushButton19(Graphics and Animations)")
(cx-gui-do cx-activate-item "Graphics and Animations*Frame1*Table1*Frame7*ButtonBox7*PushButton1(Options)")
(cx-gui-do cx-set-toggle-button "Display Options*Frame4(Layout)*CheckButton1(Titles)" #t)
(cx-gui-do cx-activate-item "Display Options*Frame4(Layout)*CheckButton1(Titles)")
(cx-gui-do cx-set-list-selections "Display Options*Frame4(Layout)*DropDownList5(Colormap Alignment)" '( 3))
(cx-gui-do cx-activate-item "Display Options*Frame4(Layout)*DropDownList5(Colormap Alignment)")
(cx-gui-do cx-activate-item "Display Options*PanelButtons*PushButton1(Apply)")
(cx-gui-do cx-activate-item "Display Options*PanelButtons*PushButton2(Close)")
(cx-gui-do cx-activate-item "MenuBar*DisplayMenu*Views...")
(cx-gui-do cx-activate-item "Views*Frame2(Actions)*ButtonBox2(Actions)*PushButton6(Read)")
(cx-gui-do cx-set-text-entry "Select File*FilterText" "e:\fluent-case & data\paper\vibrating-plate-vertical-channel\2d-case\cased\*")
(cx-gui-do cx-activate-item "Select File*Apply")


我希望能把紅色的數字部分取代掉
第一個00661-->00662
下一個00661-->00663
一直重複動作
小弟對寫程式方面比較薄弱
希望各位高手能幫小弟解決這個問題
感激不盡

pedrowong 2010-01-18 10:55 PM

一、下載Editor軟體
二、製作 cmd 檔如下:
rem ===================================
rem 將 editorfile.txt 改為 實際需檔名
rem ===================================
editor edit-script.txt editorfile.txt
rem ===================================

三、製作edit-script.txt 檔如下:
===================================
r 00661 00662
r 00661 00663
r 00661 00664
r 00661 00665
r 00661 00666
'
' 將編輯長度加長到夠長,足以處理所有資料
'
r 00661 00xxx
r 00661 00yyy
r 00661 00zzz
===================================

四、執行 cmd 檔即可把紅色的數字部分取代掉

sagalee 2010-01-19 02:09 PM

感謝大大為小弟解惑
但小弟還是弄不出來
不知是哪個環節錯了
大大可以在說明詳細一點嗎
或是貼個完整範例來看看
感激不盡

pedrowong 2010-01-19 10:01 PM

假定你貼出的案例檔案名稱為 'editorfile.txt'

那麼將edit-script.txt 檔設定如下:
===================================
r 00661 00662
r 00661 00663
===================================

然後執行以下 CMD 檔:
rem ===================================
editor edit-script.txt editorfile.txt
rem ===================================

sagalee 2010-01-20 08:01 PM

感謝大大又一次詳細的說明作法
但是我還是用不出來耶...:on_51:
我試過其他指令的可以用
唯獨"r"這個指令不行
這個指令是取代動作
我也試過"ra"這是全部取代的意思
他可以用
就"r"不行
真是奇怪
想請問大大
用"r"這個指令有成功過嗎?
還是我用的作業系統關係
我是用win7
請大大為小弟在解惑一次吧!
感激不盡

pedrowong 2010-01-20 11:10 PM

這指令改新版時,改出 bug,已修復。
請重新下載。

sagalee 2010-01-20 11:51 PM

:on_79:感謝大大的幫忙
終於解決了
真是幫了我一個大忙啊...

ccutmis 2010-01-25 10:40 AM

分享一個更簡單的方法...用WSH...
 
[步驟1]在C:\ 建立一個文字檔"data.txt",裡面的內容是...
caseD-1-00001
caseD-1-00001
caseD-1-00001
caseD-1-00001

===============
[步驟2]在C:\ 建立一個文字檔並命名為 "fixNum.vbs",裡面的內容是...
Set objRegEx = CreateObject("VBScript.RegExp")

Dim arrFileLines()


AAA = ""
i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\data.txt", 1)
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close
'readfile finished!

Set objRegEx = CreateObject("VBScript.RegExp")

objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.Pattern = "\d{5}"


For l = LBound(arrFileLines) to UBound(arrFileLines) Step 1
strNewString = objRegEx.Replace(arrFileLines(l),"0000" & (l+1) )
AAA = AAA & strNewString & chr(10)
Next

Wscript.Echo AAA
==================
[步驟3]在DOS模式底下執行[步驟2]的fixNum.vbs即可~
例如: C:\fixNum.vbs [enter]

執行結果:
caseD-1-00001
caseD-1-00002
caseD-1-00003
caseD-1-00004

================

執行結果是用Echo出來的,也可以將它寫回文字檔...用VBSCRIPT的語法~分享~


所有時間均為台北時間。現在的時間是 02:27 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1