Board logo

标题: [文本处理] 批处理把文本内容横列变纵列 [打印本页]

作者: 随风    时间: 2008-4-22 21:05     标题: 批处理把文本内容横列变纵列

求助:把文本内容横列变纵列。
a.txt  不确定每行字符个数及行数。样本如下:
  1. 123456789
  2. a   bde 0
  3.     c f
复制代码
要求:代码效率不能太低,可以适当产生临时文件。
生成新文本内容如下:
  1. 1
  2. a
  3. 2
  4. 3
  5. 4
  6. 5
  7. b
  8. c
  9. g
  10. 6
  11. d
  12. 7
  13. e
  14. f
  15. 8
  16. 9
  17. 0
复制代码

[ 本帖最后由 随风 于 2008-4-23 06:56 编辑 ]
作者: youxi01    时间: 2008-4-23 18:47

有一个思路:
在各横行字符间插入空格(先将空格替换成其它非常见字符)
然后用for来提取相关内容即可。
作者: ieutk    时间: 2008-4-23 19:36

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "num=0"
  4. :aa
  5. for /f "delims=" %%a in (a.txt) do call :ie "%%a"
  6. set /a num+=1
  7. goto aa
  8. :ie
  9. set "ya=%~1"
  10. for /l %%i in (%num% 1 100) do (
  11. if "!ya:~%%i,1!"==" " goto :eof
  12. if not "!ya:~%%i,1!"=="" echo !ya:~%%i,1!
  13. goto :eof
  14.     )
复制代码

作者: 随风    时间: 2008-4-23 19:59     标题: 回复 3楼 的帖子

没仔细看题吧,不光是横变竖哦。。
作者: 梦想种子    时间: 2008-4-23 20:14

  1. @echo off&setlocal enabledelayedexpansion
  2. set max=0
  3. for /f "delims=" %%i in (a.txt) do (
  4. set /a i+=1
  5. call :split "%%i" !i!)
  6. for /l %%i in (0 1 %max%) do (
  7. for /l %%j in (0 1 !i!) do (
  8. set t=!s_%%j_%%i!
  9. if not "!t!" == "" if not "!t!" == " " echo !t!))
  10. pause&exit
  11. :split
  12. set c=-1&set "s=%~1"
  13. :next
  14. set /a c+=1
  15. if not "!s:~%c%,1!" == "" (
  16. set s_%2_%c%=!s:~%c%,1!
  17. goto next
  18. ) else if %c% gtr %max% set max=%c%
复制代码

[ 本帖最后由 梦想种子 于 2008-4-25 21:33 编辑 ]
作者: ieutk    时间: 2008-4-23 20:23

没仔细看题吧,不光是横变竖哦。。


3楼代码不对?

我运行楼上代码的结果同我的一样呀
作者: 随风    时间: 2008-4-23 20:48

是我看错了。。不好意识。。
作者: ieutk    时间: 2008-4-24 10:40

用call来跳出for


回复7楼:

没有的事,不过我的代码还不完整呢!

[ 本帖最后由 ieutk 于 2008-4-27 11:54 编辑 ]




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