找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 63852|回复: 20

【练习-008】批处理实现文本内容横列变纵列

[复制链接]
发表于 2008-8-2 06:38:11 | 显示全部楼层 |阅读模式
因为论坛会吞掉文本每行的第一个空格,现截图上来。

每行的字符数都一样,但未知多少个字符。
注意,文本第三行r之后有一个空格。第四行x之后有一个空格。
输出为:

即横列变纵列,并保留原来空格。
要求,高效,不生成临时文件。
发表于 2008-8-2 08:15:24 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a num=-1
  4. :main
  5. set "ot="
  6. set /a num+=1
  7. for /f "delims=" %%a in (a.txt) do call :ie "%%a"
  8. echo.%ot%
  9. goto :main


  10. :ie
  11. set "var=%~1"
  12. if "!var:~%num%,1!"=="" (pause&exit)
  13. call,set "ot=!ot!%%var:~%num%,1%%"
  14. goto :eof
复制代码

评分

参与人数 1技术 +1 收起 理由
Hello123World + 1 乐于助人

查看全部评分

 楼主| 发表于 2008-8-2 08:54:13 | 显示全部楼层
我试了一下,这题能在5句之内解决。
发表于 2008-8-2 21:43:13 | 显示全部楼层
@echo off&setlocal enabledelayedexpansion
for /l %%a in (0,1,10) do (
    for /f "delims=" %%i in (a.txt) do (
        set ke=%%i
        set /p=!ke:~%%a,1!<nul
    )
    echo.
)
pause

评分

参与人数 1PB +3 收起 理由
pusofalse + 3

查看全部评分

 楼主| 发表于 2008-8-2 21:55:06 | 显示全部楼层
4楼的代码够简洁,但仍不通用。
每行的字符数是未知的。
发表于 2008-8-2 23:49:02 | 显示全部楼层
先贴一种方案吧:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "n=0"&set "m=0"
  3. :lp
  4. for /f "delims=" %%+ in (1.txt) do (
  5.     set /a x+=1&set "str=%%+"
  6.     if "!str:~%n%,1!" equ "" (
  7.        set /a m+=1
  8.        if !m! equ !x! pause>nul&goto :eof
  9.        ) else (
  10.        set /p=!str:~%n%,1!<nul
  11.     )
  12. )
  13. echo.&set /a n+=1,x=0&goto lp
复制代码
发表于 2008-8-3 00:29:41 | 显示全部楼层
再来段貌似高深的代码:
  1. @echo off
  2. for /f "delims=" %%. in (1.txt) do set "_=0"&set "..=%%."&call :{}
  3. for /l %%+ in (1,1,%_%) do call,echo.%%..%%+%%
  4. pause>nul&goto :eof
  5. :{}
  6. set "#=%..:~,1%"&call,set "..=%%..:~1%%"&set /a _+=1&call,set "..%_%=%%..%_%%%%#%"&if defined .. goto {}
复制代码


说明下:
       之所以写下这么一段怪异的代码,就是想告诉大家,只要你运用得得当,批处理真的是可以随心所欲地写,这也就
是其中乐趣所在了。。。

[ 本帖最后由 batman 于 2008-8-3 00:50 编辑 ]

评分

参与人数 3PB +13 收起 理由
keen + 6 太高深了,看不懂,不过好像少了一行!
tireless + 1 看你这代码真累,真的~_~
ieutk + 6 看你这代码真累,真的~_~

查看全部评分

发表于 2008-8-3 13:31:54 | 显示全部楼层
这道题并不难啊,大家都来锻炼下思维,踊跃答题啊!
发表于 2008-8-3 15:18:25 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do set str=%%i&set/a n+=1,m=0&call:lp
  3.    for /l %%i in (0 1 %m%) do if not "!%%ip!"=="" echo !%%ip!
  4. pause&goto :eof
  5. :lp
  6.    set "%m%p=!%m%p!!str:~%m%,1!"
  7.    if not "!str:~%m%,1!"=="" set/a m+=1&goto lp
复制代码
发表于 2008-8-3 16:33:58 | 显示全部楼层
行的字符不同处理
  1. @echo off&setlocal enabledelayedexpansion
  2. set t=0
  3. for /f "delims=" %%i in (a.txt) do set str=%%i&set/a n+=1,m=1&call:lp
  4.    for /l %%i in (1 1 %t%) do (
  5.       for /l %%j in (1 1 %n%) do if "!%%jp%%i!"=="" (set/p= <nul)else set/p=!%%jp%%i!<nul
  6.       echo.
  7. )
  8. pause&goto :eof
  9. :lp
  10.    set "%n%p%m%=%str:~,1%"
  11.    set "str=%str:~1%"
  12.    if defined str set/a m+=1&goto lp
  13.    if %m% gtr %t% set/a t=m
复制代码
发表于 2009-4-24 18:36:58 | 显示全部楼层

第一题

发错了!还是先向别人学习

[ 本帖最后由 sjzong 于 2009-4-24 18:38 编辑 ]
发表于 2009-4-26 22:35:35 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set v=%%i
  4.     set n=0
  5.     call :lp
  6. )
  7. for /l %%i in (1 1 %n%) do (
  8.     set num=%%i
  9.     call,echo %%_!num!%%
  10. )
  11. pause&exit/b
  12. :lp
  13.     set /a n+=1
  14.     set _%n%=!_%n%!%v:~0,1%
  15.     set v=%v:~1%
  16.     if not "%v%"=="" goto lp
  17. goto :eof
复制代码

评分

参与人数 1PB +5 收起 理由
batman + 5 自己提高的同时更应去乐心助人

查看全部评分

发表于 2009-4-26 22:44:32 | 显示全部楼层
回复batman

不是说我不想帮助别人,只是不知道怎么样去帮助别人。

我觉得自己的技术还不够成熟,怕给别人说错了,误导别人,这个责任我担不起。
发表于 2009-4-26 23:31:50 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (set v=%%i&call :lp)
  3. for /l %%i in (0 1 %n%) do (echo.!#%%i!)
  4. pause&goto :eof

  5. :lp
  6. for /l %%a in (0,1,100) do (if "!v:~%%a,1!"=="" (set n=%%a&goto :eof) else (set #%%a=!#%%a!!v:~%%a,1!))
复制代码
发表于 2009-4-27 10:58:35 | 显示全部楼层
新人,来学习学习,支持楼主了,说实话看了就头大,吼吼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:53 , Processed in 0.024803 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表