Board logo

标题: 【练习-012】批处理实现一行内容分行输出 [打印本页]

作者: pusofalse    时间: 2008-8-12 19:58     标题: 【练习-012】批处理实现一行内容分行输出

a.txt:
  1. aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九
复制代码
输出如下:
  1. abcdefghi
  2. ABCDEFGHI
  3. 123456789
  4. 一二三四五六七八九
复制代码
唯一要求,老手略过,留给新手做练习,不能直接echo。
请先发现其中的规律。
其他,生成临时文件、代码超过一页都不重要,正确输出即可。

[ 本帖最后由 pusofalse 于 2008-8-12 20:27 编辑 ]
作者: batman    时间: 2008-8-12 20:29

这题确实值得新手们好好思考一下了,找中入手点是解此题的关键。
作者: 523066680    时间: 2008-8-12 21:16     标题: 第一个想到的思路……

@echo off
setlocal enabledelayedexpansion
set a=-1
for /f "tokens=*" %%a in ('type 1.x') do set hang=%%a
:a
set /a a+=1
set /a b=%a%
  :b
  set hang%a%=!hang%a%!!hang:~%b%,1!
  set /a b=%b%+4
  if not "!hang:~%b%,1!"=="" goto :b
echo,!hang%a%!
if %a% leq 2 goto :a
pause

这个思路很直接,没啥特别之处,就是设
第一行为1,5,9,13,……位上的
第二行为2,6,10,14……位上的
第……

[ 本帖最后由 523066680 于 2008-8-12 21:20 编辑 ]
作者: pusofalse    时间: 2008-8-12 21:36

set/a的表达式。。。可以简写为:
set/a a+=1,b=a
... ...
set /a b+=4
作者: batman    时间: 2008-8-12 21:58

支持一题多解,大家多动动脑筋了,呵呵

[ 本帖最后由 batman 于 2008-8-12 22:34 编辑 ]
作者: pusofalse    时间: 2008-8-12 22:32

我唯一的要求被无视了啊。。
这题的要求为何如此之松。
作者: 随风    时间: 2008-8-12 22:46

凑个热闹
  1. @echo off&setlocal EnableDelayedExpansion
  2. set "str=aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九"
  3. for /l %%a in (0 1 35) do (
  4.    set /a n+=1
  5.    call set .!n!=%%.!n!%%!str:~%%a,1!
  6.    set /a n=n%%4
  7. )
  8. for /f "tokens=2 delims==" %%a in ('set .') do echo %%a
  9. pause>nul
复制代码

作者: terse    时间: 2008-8-13 00:28

我也凑个闹热
  1. @echo off&setlocal EnableDelayedExpansion
  2. set "str=aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九"
  3. for /l %%i in (0 1 3) do for /l %%j in (%%i 4 35) do set %%i=!%%i!!str:~%%j,1!
  4. for /l %%i in (0 1 3) do echo !%%i!
  5. pause>nul
复制代码

作者: 523066680    时间: 2008-8-13 09:03     标题: 刷多两次……积分

没有独到之处……
@echo off&setlocal enabledelayedexpansion
set /p hang=<1.x
set a=0
:a
set h%a%=!h%a%!!hang:~%a%,1!
if %a% leq 3 (set /a a+=1) else (set /a a=0 &set hang=%hang:~4%)
if defined hang goto :a
for /l %%a in (0,1,3) do echo !h%%a!
pause

---------------------------2-----------------------------------------------
@echo off
set/p hang=<1.x
set /a a=-1
:a
set /a a+=1 &call,set /a b=%%a%%+32
for /l %%a in (%a%,4,%b%) do (
call set h=%%h%%%%hang:~%%a,1%%)
echo,%h%
if %a% lss 3 set h=&goto :a
pause>nul
作者: zlp1982994    时间: 2008-9-21 22:20

试写了一段代码,分享分享,请老手们多多指教。。。
  1. @ echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set "x=aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九"
  4. set y=0
  5. set s=0
  6. : start
  7. del /q /f q%s%.txt>nul 2>nul
  8. : loop
  9. set /a y+=4
  10. if %y% ==36 set y=1 & call :dsp & call q.bat>dsp.txt & set s=1& goto start
  11. if %y% ==37 set y=2 & call :dsp & call q.bat>>dsp.txt & set s=2& goto start
  12. if %y% ==38 set y=3 & call :dsp & call q.bat>>dsp.txt & set s=3& goto start
  13. if %y% ==39 set y=4 & call :dsp & call q.bat>>dsp.txt & set s=0& goto end
  14. echo !x:~%y%,1!>>q%s%.txt
  15. goto loop
  16. :dsp
  17. echo @echo off>q.bat
  18. if %y%==1 echo echo a^^>>q.bat
  19. if %y%==2 echo echo A^^>>q.bat
  20. if %y%==3 echo echo 1^^>>q.bat
  21. if %y%==4 echo echo 一^^>>q.bat
  22. for /f "tokens=1 delims=" %%i in (q%s%.txt) do echo %%i^^>>q.bat
  23. goto :eof
  24. : end
  25. type dsp.txt
  26. pause>nul 2>nul
复制代码

作者: keen    时间: 2009-5-3 19:37

再次修改:
  1. @echo off
  2. set "str=aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九"
  3. :lp
  4. call,set "var=%%str:~%n%,1%%"
  5. call,set "str2=%%str2%%%var%"
  6. set /a n+=4
  7. if not defined var (echo %str2%) else goto lp
  8. call,set "str=%%str:~1%%"&set n=0&set "str2="
  9. set /a m+=1
  10. if %m%==4 pause&exit
  11. goto lp
复制代码

[ 本帖最后由 keen 于 2009-5-8 22:47 编辑 ]
作者: netbenton    时间: 2009-5-3 21:15     标题: 练练手

  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. set "x=aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九"
  3. for /l %%a in (0,1,3) do ((for /l %%b in (%%a,4,35) do set/p=!x:~%%b,1!<nul)&echo.)
  4. pause
复制代码

[ 本帖最后由 netbenton 于 2009-5-3 23:32 编辑 ]
作者: inittab    时间: 2009-5-8 23:27

刷变量方式
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九
  3. for /l %%i in (0,1,35) do (
  4. set/a n+=1
  5. call set st!n!=%%st!n!%%!str:~%%i,1!&if !n! equ 4 set n=0
  6. )
  7. for /l %%i in (1,1,4) do echo !st%%i!
  8. pause
复制代码

作者: 尘丶    时间: 2015-10-23 22:58

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.     set k=%%a
  4.     for /l %%b in (0,1,80) do (
  5.     set j=!k:~%%b,1!
  6. for %%c in (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) do if !j!==%%c set xiao=!xiao!%%c&set _!j!=1
  7. for %%d in (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) do if !j!==%%d set da=!da!%%d
  8.     for /l %%e in (0,1,9) do if !j!==%%e set shu=!shu!%%e&set _!j!=1
  9.     if not defined _!j! set zhong=!zhong!!j!
  10. )
  11. )
  12. echo;!xiao!&echo;!da!&echo;!shu!&echo;!zhong!
  13. pause
复制代码

作者: 依山居    时间: 2015-11-5 07:42

  1. #python版一行内容分行输出
  2. #依山居 18:14 2015/11/4
  3. #题目来源 http://www.bathome.net/thread-1454-1-1.html
  4. a="aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九"
  5. """
  6. 分行输出为:
  7. abcdefghi
  8. ABCDEFGHI
  9. 123456789
  10. 一二三四五六七八九
  11. """
  12. print("方法一:===============")
  13. for r in range(0,4):
  14.     t=''
  15.     for s in range(0+r,len(a),4):
  16.         t=t+a[s]
  17.     print(t)
  18. print("方法二:===============")
  19. #=_=这个方法会不会看起来比较傻?
  20. l=list(a)
  21. ta=tb=tc=td=''
  22. for r in range(0,9):
  23.     for s in range(0,4):
  24.         if s==0:
  25.             ta=ta+l.pop(0)
  26.         if s==1:
  27.             tb=tb+l.pop(0)
  28.         if s==2:
  29.             tc=tc+l.pop(0)
  30.         if s==3:
  31.             td=td+l.pop(0)
  32. print(ta)
  33. print(tb)
  34. print(tc)
  35. print(td)
  36.       
  37. print("方法3:回字有N种写法===============")
  38. import string
  39. ta=tb=tc=td=''
  40. la=string.ascii_lowercase
  41. ua=string.ascii_uppercase
  42. nb=string.digits
  43. ub="一二三四五六七八九"
  44. for s in a:
  45.     if s in la:
  46.         ta=ta+s
  47.     if s in ua:
  48.         tb=tb+s
  49.     if s in nb:
  50.         tc=tc+s
  51.     if s in ub:
  52.         td=td+s
  53. print(ta)
  54. print(tb)
  55. print(tc)
  56. print(td)
  57. print("方法4:回字有一种叫做正则的写法===============")
  58. import re
  59. #这正则写法感觉不科学,暂时没有好的想法
  60. reg=["[a-z]","[A-Z]","\d","[^\da-zA-Z]"]
  61. for s in reg:   
  62.     rega=re.compile(s)
  63.     s=re.findall(rega,a)
  64.     print("".join(s))
  65. """
  66. 输出:
  67. 方法一:===============
  68. abcdefghi
  69. ABCDEFGHI
  70. 123456789
  71. 一二三四五六七八九
  72. 方法二:===============
  73. abcdefghi
  74. ABCDEFGHI
  75. 123456789
  76. 一二三四五六七八九
  77. 方法3:回字有N种写法===============
  78. abcdefghi
  79. ABCDEFGHI
  80. 123456789
  81. 一二三四五六七八九
  82. 方法4:回字有一种叫做正则的写法===============
  83. abcdefghi
  84. ABCDEFGHI
  85. 123456789
  86. 一二三四五六七八九
  87. """
复制代码

作者: 依山居    时间: 2015-11-5 08:25

  1. print("=======================论回字的第五种写法============")
  2. l=list(a)
  3. ta=tb=tc=td=''
  4. for r in range(0,9):
  5.     ta+=l.pop(0)
  6.     tb+=l.pop(0)
  7.     tc+=l.pop(0)
  8.     td+=l.pop(0)
  9. print(ta)
  10. print(tb)
  11. print(tc)
  12. print(td)
复制代码

作者: 依山居    时间: 2015-11-5 10:09

  1. print("==========试试回字的第六种写法好不好使==========")
  2. lena=len(a)
  3. t=''
  4. lena=len(a)
  5. for s in range(0,4):
  6.     t=''   
  7.     for l in range(s,lena,4):
  8.         t+=a[l]
  9.     print(t)
复制代码

作者: taofan712    时间: 2017-2-28 14:05

  1. @echo off &setlocal enabledelayedexpansion
  2. set var=aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九&set /a a=0
  3. :loop
  4. for /l %%a in (%a%,4,36) do set/p=!var:~%%a,1!<nul
  5. echo;&if !a! lss 3 set /a a+=1 & goto loop
  6. pause&exit
复制代码

作者: lengmoke    时间: 2021-9-24 17:44

  1. @echo off & setlocal EnableDelayedExpansion
  2. set strs=aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九
  3. :loop
  4. set str=!strs:~0,4!
  5. for /l %%i in (0,1,3) do ( set "str%%i=!str%%i!!str:~%%i,1!" )
  6. set strs=!strs:~4!
  7. if defined strs ( goto :loop )
  8. for /l %%i in (0,1,3) do ( echo !str%%i! )
复制代码

作者: qixiaobin0715    时间: 2021-9-26 10:05

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set var=aA1一bB2二cC3三dD4四eE5五fF6六gG7七hH8八iI9九
  4. :a
  5. set /a n+=1
  6. set /a m=(n-1)%%4
  7. set str%m%=!str%m%!!var:~%m%,1!
  8. if %m%==3 set var=%var:~4%
  9. if not "%var%"=="" goto a
  10. for /l %%a in (0,1,3) do echo,!str%%a!
  11. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2