返回列表 发帖

【练习-045】批处理按要求输出字符串并替换字符串

&&为了加强大家对大小写字母处理的技术,特出题,题目如下;
题一
   已知有abdefg kmli socsd pdxy nq五个字符串,要求用批处理随机输出大小写字符串到a.txt,,输出为每行10个字符串,共10
行,示例如下:
nqpdxySOCSDabdefgabdefgnqPDXYnqnqnq
pdxypdxyNQNQSOCSDSOCSDABDEFGKMLIkmlipdxy
socsdsocsdsocsdPDXYABDEFGabdefgPDXYnqsocsdPDXY
KMLIPDXYpdxySOCSDNQSOCSDABDEFGkmliNQABDEFG
SOCSDabdefgSOCSDabdefgPDXYnqKMLISOCSDSOCSDNQ
KMLIkmliabdefgNQnqKMLInqABDEFGKMLIpdxy
kmlipdxykmlipdxynqABDEFGNQKMLIpdxypdxy
pdxynqKMLInqsocsdABDEFGsocsdpdxypdxyABDEFG
KMLIpdxynqSOCSDPDXYKMLIKMLIpdxySOCSDnq
socsdnqNQkmliKMLIpdxynqabdefgSOCSDSOCSD
题二
   要求用批处理对文本a.txt中的字符串进行替换并输出到b.txt,注意替换是区分大小写的,如将里面的ABDEFG全替换成bathome,
但abdfeg不被替换,以上面的文本为例,输出后b.txt的内容应如下:
nqpdxySOCSDabdefgabdefgnqPDXYnqnqnq
pdxypdxyNQNQSOCSDSOCSDbathomeKMLIkmlipdxy
socsdsocsdsocsdPDXYbathomeabdefgPDXYnqsocsdPDXY
KMLIPDXYpdxySOCSDNQSOCSDbathomekmliNQbathome
SOCSDabdefgSOCSDabdefgPDXYnqKMLISOCSDSOCSDNQ
KMLIkmliabdefgNQnqKMLInqbathomeKMLIpdxy
kmlipdxykmlipdxynqbathomeNQKMLIpdxypdxy
pdxynqKMLInqsocsdbathomesocsdpdxypdxybathome
KMLIpdxynqSOCSDPDXYKMLIKMLIpdxySOCSDnq
socsdnqNQkmliKMLIpdxynqabdefgSOCSDSOCSD
第一题满分10分,第二题满分20分,视情况加分,加分以思路为重
***共同提高***

第二题太简单了吧。
技术问题请到论坛发帖求助!

TOP

多谢随风兄指出,已修正。
***共同提高***

TOP

第二题
@echo off
mshta "javascript:var fso=new ActiveXObject('Scripting.FileSystemObject');fso.OpenTextFile('C:\\test\\b.txt',2,true).Write(fso.OpenTextFile('C:\\test\\a.txt').ReadAll().replace(/ABDEFG/g, 'bathome'));close()"COPY
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4楼 的帖子

调用vbs都行...vbs看起来比批处理明了直接多了.

我冲动了哈...

[ 本帖最后由 xxx 于 2009-4-22 21:38 编辑 ]

TOP

回复 5楼 的帖子

那个...那个...嗯~~~好像不是VBS吧?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 6楼 的帖子

原来是js啊...脸红.

TOP

请大家用纯批解决,虽然这个要求有点苛刻。。。
***共同提高***

TOP

楼上没想到直接set "var=abdefg ABDEFG kmli KMLI socsd SOCSD pdxy PDXY nq NQ"?
***共同提高***

TOP

题外话,居然还能将自己的帖子设置成高亮,这是Bug吧。

TOP

回复 12楼 的帖子

论坛的默认设置版主应该可以操作包含自己的帖子在内的所有帖子吧,有些论坛不能这样做估计是后台做了客户化的设置。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

第二题:

@echo off&setlocal enabledelayedexpansion
set replace=bathome
for /f "delims=" %%a in (a.txt) do set n=0&set "st="&call :sub %%a
pause>nul&goto :eof
:sub
set str0=%1&set str1=!str0:~%n%,6!
if "!str1!"=="ABDEFG" (set st=!st!!replace!&set/a n+=6) else (set st=!st!!str0:~%n%,1!&set/a n+=1)
if not "!str1!"=="" (goto sub)
echo !st!
goto :eofCOPY
1

评分人数

TOP

第一小题:
思路,用数字作为变量对应字串。将随机数转化为数字变量替换后输出随机字串。
@echo off&setlocal enabledelayedexpansion
set "var=abdefg ABDEFG kmli KMLI socsd SOCSD pdxy PDXY nq NQ"
set n=0
for %%i in (%var%) do (set !n!=%%i&set/a n+=1)
:begin
set ram=%random%%random%%random%&set "str="
for /l %%a in (1,1,10) do (set "str=!str! !ram:~%%a,1! ")
set out=%str: =!!%
echo !out!>>b.txt
set/a n-=1&if !n! gtr 0 (goto :begin)
start b.txtCOPY

[ 本帖最后由 inittab 于 2009-4-23 07:35 编辑 ]
1

评分人数

    • 随风: 奇妙的替换!PB + 11

TOP

第一题
@echo off&setlocal enabledelayedexpansion
set "var1=abdefg kmli socsd pdxy nq ABDEFG KMLI SOCSD PDXY NQ"
for %%a in (!var1!) do (
   set /a n+=1,m=n-5
   if !n! leq 5 (set .!n!=%%a) else set "#!m!=%%a"
)
for /l %%l in (1 1 10) do (
   set "num="
   for /l %%a in (1 1 10) do (
      set /a w=!random!%%2,y=!random!%%5+1
      for %%j in (!y!) do if !w! equ 0 (set str=!#%%j!) else set str=!.%%j!
      set num=!num!!str!
   )
   echo !num!
)
pause
COPY
第二题还真是费了翻脑筋。。
@echo off&setlocal enabledelayedexpansion
set zm=a b c d e f g h i j k l m n o p q r s t u v w x y z
set "var1=ABDEFG"
set "var2=bathome"
set "max=!var1!"
for %%a in (!zm!) do set max=!max:%%a= %%a !
for %%a in (!max!) do set /a n+=1
for /f "delims=" %%a in (a.txt) do (
    set num2=%%a&set "jie="
    set num=!num2:%var1%= %var1% !
    for %%i in (!num!) do (
       if /i not "%%i"=="%var1%" (set jie=!jie!%%i) else (
          set "str=!num2:~0,%n%!"
          if "!str!"=="%var1%" (set jie=!jie!%var2%) else set "jie=!jie!!str!"
        )
        set "num2=!num2:*%%i=!"
     )     
    echo !jie!
)
pauseCOPY

[ 本帖最后由 随风 于 2009-4-23 06:07 编辑 ]
1

评分人数

技术问题请到论坛发帖求助!

TOP

回复 15楼 的帖子

牛!
set out=%str: =!!% 好晦涩的写法 不仅使我想起了 %var:*"=set "var=%
它们是兄弟吧 ^_^
百思不得其解 set out=%str: =!!% 这句是如何替换的?能讲解下吗?
你好像少写了个空格 (set "str=!str! !ram:~%%a,1! ") 否则第一个字符是数字。COPY
.

[ 本帖最后由 随风 于 2009-4-23 06:51 编辑 ]
技术问题请到论坛发帖求助!

TOP

返回列表