第1个回答 2011-06-10
current=Replace(WScript.ScriptFullName,WScript.ScriptName,"")
Dim fname
fname="a.txt" '改成相应的原始文件
Dim fso
Set fso = CreateObject("scripting.filesystemobject")
Set ff=fso.OpenTextFile(current&fname,1)
Dim strs:strs=""
Dim stmp:stmp=""
Dim quo(4)
Do While Not ff.AtEndOfStream
stmp=""
stmp=ff.ReadLine
tmp=RegExpTest("\(\d+\)",stmp)
numb=CInt(Replace(Replace(tmp,"(",""),")",""))
Erase quo
quo(0)=numb\16 &","
quo(1)=(numb Mod 16)\8 &","
quo(2)=(numb Mod 16 Mod 8)\4 &","
quo(3)=(numb Mod 16 Mod 8 Mod 4)\2
Dim sline
sline=Replace(stmp,tmp,("("&quo(0)&quo(1)&quo(2)&quo(3)&")"))
strs=strs&sline & vbcrlf
Loop
ff.Close
'WScript.Echo strs
Set ft=fso.CreateTextFile(current&"b.txt")
ft.Write strs
ft.Close
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches ' 建立变量。
Set regEx = New RegExp ' 建立正则表达式。
regEx.Pattern = patrn ' 设置模式。
regEx.IgnoreCase = True ' 设置是否区分字符大小写。
regEx.Global = True ' 设置全局可用性。
Set Matches = regEx.Execute(strng) ' 执行搜索。
For Each Match in Matches ' 遍历匹配集合。
RetStr = Match.Value
Next
RegExpTest = RetStr
End Function
'保存为xx.vbs 放在同目录下运行就行了,好运!
‘附:楼上的代码短小精悍,佩服。 貌似偶的代码是vbs,不用正则的话,代码会短小一些,也许是杀鸡用牛刀了,呵呵
第2个回答 2011-06-10
说明:就是按你的要求来的,代码说明,就算了,如果你懂自然会懂的。
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=()" %%i in (a.txt) do (
set/a s1=%%j/16,s2=%%j%%16/8,s3=%%j%%16%%8/4,s4=%%j%%16%%8%%4/2
echo %%i^(!s1!,!s2!,!s3!,!s4!^)%%k>>b.txt)
第二种:先判断b.txt是否存在,自己选择运行:
@echo off
if exist b.txt (echo b.txt已存在&set/p a=是否继续^(Y/N^):)
if /i "%a%"=="n" (exit)
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=()" %%i in (a.txt) do (
set/a s1=%%j/16,s2=%%j%%16/8,s3=%%j%%16%%8/4,s4=%%j%%16%%8%%4/2
echo %%i^(!s1!,!s2!,!s3!,!s4!^)%%k>>b.txt)
第3个回答 2011-06-10
推荐用软件Replace Pioneer做一个简单的替换就可以了,详细步骤:
1. ctrl-o打开a.txt
2. ctrl-h打开替换窗口
在search for pattern输入"ab\((\d+)\)cd"(不带双引号)
在replace with pattern输入
"ab\(sprintf("%d,%d,%d,%d",$1/16,$1%16/8,$1%16%8/4,$1%16%8%4/2)\)cd"(不带双引号)
3. 点击replace即可,经测试成功。
4. ctrl-s保存为b.txt
如果一次处理多个文件,第3步点击Batch...按钮,然后把多个文件拖拽到Batch Runner窗口中,点击Batch Replace即可。
第4个回答 2011-06-10
一楼好象理解错了,再写一个,f1=原文件 f2=新文件,需要解释另 Hi 交流
echo off&setlocal enabledelayedexpansion
set f1=a.txt
set f2=b.txt
(for /f "usebackq tokens=1,2* delims=()" %%a in ("%f1%")do (
set h=%%b
for %%i in (16 8 4 2)do set/a "s%%i=h/%%i,h%%=%%i"
echo.%%a^(!s16!,!s8!,!s4!,!s2!^)%%c
))>"%f2%"
start "" "%f2%"本回答被提问者采纳
第5个回答 2011-06-10
用位运算貌似会更快点:
@echo off&Setlocal EnableDelayedExpansion
(for /f "usebackq tokens=1-3 delims=()" %%i in ("a.txt") do (
set "y=%%j"
(for /l %%a in (4 -1 1) do (
set/a n+=1
set/a $!n!=!y!">>"%%a
set/a y%%="("1"<<"%%a")"
))&set "n="
for /f "tokens=2 delims==" %%b in ('set $') do set "r=!r!%%b,"
echo;%%i^(!r!^)%%k& set "r="
))>b.txt