
标题: 把文本内容横列变纵列。 [打印本页]
作者: pusofalse 时间: 2008-4-23 20:34 标题: 把文本内容横列变纵列。
根据26933062前辈的问题想出来的~
a.txt:
aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz
输出为:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
[ Last edited by pusofalse on 2008-4-23 at 08:36 PM ]
作者: dreamseed 时间: 2008-4-23 21:05
除非像所述的格式那么工整,否则没法逆转,将会出现多解。
作者: 26933062 时间: 2008-4-23 21:09
:CODE: [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set /p var=<a.txt
for /l %%l in (0 1 25) do (
for /l %%i in (1 1 4) do (
set num%%i=!num%%i!!var:~%%l,1!
set var=!var:~1!
))
for /l %%a in (1 1 4) do echo !num%%a!
pause
[ Last edited by 26933062 on 2008-4-23 at 09:10 PM ]
作者: pusofalse 时间: 2008-4-23 21:16
| Quote: |
Originally posted by 26933062 at 2008-4-23 09:09 PM:
:[code]
@echo off&setlocal enabledelayedexpansion
set /p var=<a.txt
for /l %%l in (0 1 25) do (
for /l %%i in (1 1 4) do (
set num%%i=!num%%i!!var:~%%l,1!
set var=!var:~ ... |
|
会显示
abcdfghiklmnpqrsuvwxz
abcefghjklmopqrtuvwyz
abdefgijklnopqstuvxyz
acdefhijkmnoprstuwxyz
???
作者: bat-zw 时间: 2008-4-23 21:34
CODE: [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set a=-4
:begin
set /a a+=4,b=a+1,c=b+1,d=c+1
for /f "delims=" %%i in (a.txt) do (
set str=%%i
set str1=!str:~%a%,1!
set var1=!var1!!str1!
set str2=!str:~%b%,1!
set var2=!var2!!str2!
set str3=!str:~%c%,1!
set var3=!var3!!str3!
set str4=!str:~%d%,1!
set var4=!var4!!str4!
if not "!str4!"=="" goto begin
)
for /l %%i in (1,1,4) do call,echo !var%%i!
pause
作者: 26933062 时间: 2008-4-23 21:48
这回对了吧CODE: [Copy to clipboard]
@echo off&set /p var=<a.txt
for /l %%l in (1 1 26) do (
for /l %%i in (1 1 4) do (
call set num%%i=%%num%%i%%%%var:~0,1%%
call set var=%%var:~1%%
))
for /l %%a in (1 1 4) do call echo %%num%%a%%
pause
作者: bat-zw 时间: 2008-4-23 21:51
| Quote: |
Originally posted by 26933062 at 2008-4-23 21:48:
这回对了吧
[code]
@echo off&set /p var=<a.txt
for /l %%l in (1 1 26) do (
for /l %%i in (1 1 4) do (
call set num%%i=%%num%%i%%%%var:~0,1%%
call set var=%%var:~1%%
... |
|
对了,但效率是问题了
作者: bat-zw 时间: 2008-4-23 22:02
| Quote: |
Originally posted by dreamseed at 2008-4-23 21:05:
除非像所述的格式那么工整,否则没法逆转,将会出现多解。 |
|
a.txtCODE: [Copy to clipboard]
vydufhqvwirkdqqjmhadwafhchcvwapknltyionafbawcgmnpmllxfzceeddayfmgnawhgqnoxbncxoffcjnqnruqbzuiccfurtsvwpszsvkfypzipnrlwfzcrtypuczqansilblufugryitixutpbopufsugxwellvgahfkjktdjjdstnmjrnrwvfiarvxmpggeuvjsu
运行我的代码,结果如下(自己试):
vfwdmwcwnifcpxeaghocfqqiuvzfilcpqiuripuglajjtrvrpuu
yhiqhahalobgmfeyngxxcnbcrwsypwrualfyxbfxlhkjnnfvgv
dqrqafcptnamlzdfaqbojrzctpvpnftcnbuiuoswvftdmrixgj
uvkjdhvkyawnlcdmwnnfnuufsskzrzyzslgttpuegkdsjwames
请按任意键继续. . .
附a.txt内容生成代码:CODE: [Copy to clipboard]
@echo off
set a=abcdefghijklmnopqrstuvwxyz
:begin
set /a n+=1
if %n% equ 202 echo %var%>>a.txt&goto :eof
set /a b=%random%%%26
call,set str=%%a:~%b%,1%%
set var=%var%%str%
goto begin
[ Last edited by zw19750516 on 2008-4-23 at 10:05 PM ]
作者: pusofalse 时间: 2008-4-23 22:06 标题: 这是我的代码~可惜要生成临时文件~T.T
@echo off&setlocal enabledelayedexpansion
echo %time%
set n=-4
:1
set /a n+=4
for /f %%a in (a.txt) do (
set str=%%a
set var=!str:~%n%,1!
set/p=!var!<nul>>temp.tmp
if !var! equ z goto :2
)
goto :1
:2
for /l %%a in (1 1 4) do for /f %%i in (temp.tmp) do echo %%i
echo %time%
pause
模仿zw19750516的另外一贴子,用时0.04-0.06秒之间,完全是在标签2内投机取巧啊~T.T
可以问下两位前辈 学习批处理已经多长时间了吗~?
作者: bat-zw 时间: 2008-4-23 22:08
| Quote: |
Originally posted by pusofalse at 2008-4-23 22:06:
@echo off&setlocal enabledelayedexpansion
echo %time%
set n=-4
:1
set /a n+=4
for /f %%a in (a.txt) do (
set str=%%a
set var=!str:~%n%,1!
set/p=!var!<nul>>temp.tmp
if !va ... |
|
看我注册时间
ps: goto 后面不要加:
[ Last edited by zw19750516 on 2008-4-23 at 10:10 PM ]
作者: dreamseed 时间: 2008-4-23 22:13
多解。不可行。
例如 abcd
可“还原”为CODE: [Copy to clipboard]
ac
b
CODE: [Copy to clipboard]
a
bc
CODE: [Copy to clipboard]
a
c
b
还有许多许多...
作者: bat-zw 时间: 2008-4-23 22:16
你先还是测试一下再说多解的事吧,我们是分4组然后递进4位截取的字符,真不知道怎么会出现多解!!!
作者: 26933062 时间: 2008-4-23 22:23
再来一个
:CODE: [Copy to clipboard]
@echo off&set /p str=<a.txt
setlocal enabledelayedexpansion
for /l %%a in (1 1 26) do (
set var=!var!!str:~0,1!
call set str=%%str:!var:~-1!=%%
)
for /l %%a in (1 1 4) do echo !var!
pause
作者: pusofalse 时间: 2008-4-23 22:31
@echo off&setlocal enabledelayedexpansion
@echo %time%
set n=-4
:1
set /a n+=4
for /f %%a in (a.txt) do (
set str=%%a
set var=!var!!str:~%n%,1!
if !var:~-1! equ z for /l %%i in (1 1 4) do @echo !var!
)
if %var:~-1% neq z goto 1
echo %time%
echo.终于没临时文件了啊。。。T.T&pause
作者: 26933062 时间: 2008-4-23 22:35
仔细看了下5楼的代码,201个字符循环了51次,那么是否可以这样呢?
:CODE: [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set /p str=<a.txt
for /l %%i in (1 1 51) do (
set var1=!var1!!str:~0,1!
set str=!str:~1!
set var2=!var2!!str:~0,1!
set str=!str:~1!
set var3=!var3!!str:~0,1!
set str=!str:~1!
set var4=!var4!!str:~0,1!
set str=!str:~1!
)
for /l %%i in (1,1,4) do call,echo !var%%i!
pause
作者: bat-zw 时间: 2008-4-23 22:39
| Quote: |
Originally posted by 26933062 at 2008-4-23 22:35:
仔细看了下5楼的代码,201个字符循环了51次,那么是否可以这样呢?
:[code]
@echo off&setlocal enabledelayedexpansion
set /p str=<a.txt
for /l %%i in (1 1 51) do ( ... |
|
是精简了,但我们不会知道有多少个字符啊,我都是考虑其通用性写的。
作者: terse 时间: 2008-4-23 23:44
我是这样写的CODE: [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (t.txt) do (
set "str=%%i"
for /l %%i in (0,1,3) do call :lp
)
pause
goto :eof
:lp
set str1=!str:~%n%,1!
set str2=!str2!!str1!
if defined str1 set/a n+=4&goto lp
set n=&echo !str2!
set str2=
还可以简化 可以少循环一次:CODE: [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (t.txt) do (
set "str=%%i"
for /l %%i in (3,-1,1) do call :lp %%i
echo !str!
)
pause
goto :eof
:lp
set/a m=n+1
set str1=!str:~%n%,1!
set str=!str:~0,%n%!!str:~%m%!
set str2=!str2!!str1!
if defined str1 set/a n+=%1&goto lp
set n=&echo !str2!
set str2=
[ Last edited by terse on 2008-4-24 at 12:30 AM ]
作者: cctv8068 时间: 2008-4-24 17:26
谢谢,长见识了。
| 欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) |
Powered by Discuz! 2.5 |