|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『楼 主』:
[跟风娱乐一下]批处理倒序输出字符串
test.txt的内容:
Quote: | ~!@#$%^&*()_+{}|:"<>? `1234567890-=[]\;',./ |
|
要求输出结果:
Quote: | /.,';\][=-0987654321` ?><":|}{+_)(*&^%$#@!~ |
|
总感觉自己的代码太长了,看看高人们有什么先进的方法。
[ Last edited by HAT on 2008-8-30 at 11:22 AM ]
|
|
|
2008-6-20 17:46 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
2 楼』:
特殊字符。。。特殊字符!~
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-6-20 18:02 |
|
|
hackerscans
初级用户
积分 73
发帖 51
注册 2007-8-31
状态 离线
|
|
2008-6-20 18:06 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
|
2008-6-20 18:11 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
5 楼』:
其实只要看过namejm的最大原样输出文本内容,并理解了其中的精髓,那么这道题就不难了。不知hat兄以为如何?
|
批处理之家新域名:www.bathome.net |
|
2008-6-20 18:19 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
6 楼』:
希望zw19750516前辈把namejm版主的那篇帖子发上来,让我等新手学习学习。。。搜索了,没找到。。。。
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-6-20 18:38 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-6-20 18:41 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
8 楼』:
谢谢。
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-6-20 18:46 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
9 楼』:
sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//" test.txt Comes from <<sed1line>>.
|
|
2008-6-20 19:24 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
10 楼』:
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
|
|
|
2008-6-20 20:22 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
11 楼』:
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 |
|
|
|
|
2008-6-21 03:46 |
|
|
recallshan
初级用户
积分 31
发帖 14
注册 2007-7-31
状态 离线
|
『第
12 楼』:
@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
不知道这段代码可否指定反向后的字符 输出到一个文本里
|
|
2008-9-18 19:29 |
|
|
metoo
初级用户
积分 195
发帖 93
注册 2006-10-28
状态 离线
|
『第
13 楼』:
来段awk的
{
nb=""
re=""
nb=split ($0,ww,"")
for (i=nb;i>0;i--)
{re=re ww[i]
}
print re
}
|
|
2008-9-18 20:21 |
|
|
recallshan
初级用户
积分 31
发帖 14
注册 2007-7-31
状态 离线
|
|
2008-9-19 01:30 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
15 楼』:
Re 14楼
就是把字符串存放到一个数组里面,然后通过数组下标的控制实现倒序输出。具体的语法可以看看gawk的帮助。
|
|
|
2008-9-19 09:49 |
|