标题: [跟风娱乐一下]批处理倒序输出字符串
[打印本页]
作者: HAT
时间: 2008-6-20 17:46
标题: [跟风娱乐一下]批处理倒序输出字符串
test.txt的内容:
Quote: |
~!@#$%^&*()_+{}|:"<>? `1234567890-=[]\;',./ |
|
要求输出结果:
Quote: |
/.,';\][=-0987654321` ?><":|}{+_)(*&^%$#@!~ |
|
总感觉自己的代码太长了,看看高人们有什么先进的方法。
[
Last edited by HAT on 2008-8-30 at 11:22 AM ]
作者: pusofalse
时间: 2008-6-20 18:02
特殊字符。。。特殊字符!~
作者: hackerscans
时间: 2008-6-20 18:06
晕。有难度哈
作者: terse
时间: 2008-6-20 18:11
@echo off
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
set var=!str!
call :lp
endlocal
)
pause
goto :eof
:lp
if defined str set/a n+=1&set str=!str:~1!&goto lp
set/a n-=1
for /l %%i in (%n% -1 0) do set/p= !var:~%%i,1!<nul
作者: bat-zw
时间: 2008-6-20 18:19
其实只要看过namejm的最大原样输出文本内容,并理解了其中的精髓,那么这道题就不难了。不知hat兄以为如何?
作者: pusofalse
时间: 2008-6-20 18:38
希望zw19750516前辈把namejm版主的那篇帖子发上来,让我等新手学习学习。。。搜索了,没找到。。。。
作者: bat-zw
时间: 2008-6-20 18:41
Quote: |
Originally posted by pusofalse at 2008-6-20 18:38:
希望zw19750516前辈把namejm版主的那篇帖子发上来,让我等新手学习学习。。。搜索了,没找到。。。。 |
|
http://www.cn-dos.net/forum/view ... highlight=%2Bnamejm
作者: pusofalse
时间: 2008-6-20 18:46
谢谢。
作者: lxmxn
时间: 2008-6-20 19:24
sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//" test.txt
Comes from <<sed1line>>.
作者: HAT
时间: 2008-6-20 20:22
Quote: |
Originally posted by zw19750516 at 2008-6-20 06:19 PM:
其实只要看过namejm的最大原样输出文本内容,并理解了其中的精髓,那么这道题就不难了。不知hat兄以为如何? |
|
其实我就是这样做的,呵呵。只是想看看还有没有其他方法。
@echo off
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
set strbak=!str!
call :reverse
endlocal
)
goto :eof
:reverse
ping -n 1 127.1>nul
if defined strbak (
set /p= !strbak:~-1!<nul
set strbak=!strbak:~0,-1!
goto :reverse
)
echo.
goto :eof
作者: HAT
时间: 2008-6-21 03:46
Quote: |
Originally posted by lxmxn at 2008-6-20 07:24 PM:
sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//" test.txt Comes from <<sed1line>>. |
|
我来贴一遍waker斑竹的解释吧,呵呵。
Quote: |
#反转一行中每个字符的顺序(类似"rev")
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
###假设一行文字是 123
###那么执行后模式空间中的内容应该按下边的顺序变化
执行/\n/!G;得
123\n
然后s/\(.\)\(.*\n\)/&\2\1/;
得
123\n23\n1
执行//D
23\n1
因为是D命令所以从头循环
模式空间有\n
所以/\n/!G;中G不执行
再来s...
23\n3\n21
再D
3\n21
循环,G不执行
再来s...
3\n\n321
再D
\n321
循环
G和s和D都不执行
执行最后的s/.//
321 |
|
作者: recallshan
时间: 2008-9-18 19:29
@echo off
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
set var=!str!
call :lp
endlocal
)
pause
goto :eof
:lp
if defined str set/a n+=1&set str=!str:~1!&goto lp
set/a n-=1
for /l %%i in (%n% -1 0) do set/p= !var:~%%i,1!<nul
不知道这段代码可否指定反向后的字符 输出到一个文本里
作者: metoo
时间: 2008-9-18 20:21
来段awk的
{
nb=""
re=""
nb=split ($0,ww,"")
for (i=nb;i>0;i--)
{re=re ww[i]
}
print re
}
作者: recallshan
时间: 2008-9-19 01:30
楼上的代码看不懂
作者: HAT
时间: 2008-9-19 09:49
标题: Re 14楼
就是把字符串存放到一个数组里面,然后通过数组下标的控制实现倒序输出。具体的语法可以看看gawk的帮助。
作者: s11ss
时间: 2008-12-17 01:28
还是vbs方便。
WSH.Echo StrReverse("~!@#$%^&*()_+{}|:""<>? `1234567890-=[]\;',./")
作者: ZJHJ
时间: 2008-12-17 23:31
哈哈,反序输出的代码我看到过。怎么也输出不到文本里,当时HAT版主 帮我出了主意。经过完善,有下面的全文反序输出代码:
@echo off
@echo.
@echo 全文反序输出(原样不丢字符)
@echo.
SET /P FSY= 将程序拉入本窗口:
cd.>fx.txt
for /f "delims=" %%i in ('findstr /n .* "%FSY%"') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
set var=!str!
call :cl
endlocal
@echo.>>fx.txt
)
goto :sc
:cl
if defined str set/a n+=1&set str=!str:~1!&goto cl
set/a n-=1
for /l %%j in (%n% -1 0) do set/p= !var:~%%j,1!<nul>>fx.txt
goto :eof
:sc
cd.>fax.txt
for /f "delims=" %%a in ('findstr /n .* fx.txt') do (
set "var=%%a"
setlocal enabledelayedexpansion
set var=!var:*:=!
if not "!var!"=="" set var=!var: =!
echo.!var!>>fax.txt
endlocal
)
del fx.txt
start fax.txt
[
Last edited by ZJHJ on 2008-12-17 at 23:32 ]