中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 以解决:把文本内容横列变纵列。
« [1] [2] »
作者:
标题: 以解决:把文本内容横列变纵列。 上一主题 | 下一主题
terrytong
中级用户





积分 240
发帖 115
注册 2008-3-10
状态 离线
『第 16 楼』:  

这里高手真多啊,偶刚学,还没入门呢。以后大家多多指教...

2008-4-23 19:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dreamseed
初级用户




积分 38
发帖 10
注册 2007-10-1
来自 GZ
状态 离线
『第 17 楼』:  


@echo off&setlocal enabledelayedexpansion
set max=0
for /f "delims=" %%i in (a.txt) do (
set /a i+=1
call :split "%%i" !i!)
for /l %%i in (0 1 %max%) do (
for /l %%j in (0 1 !i!) do (
set t=!s_%%j_%%i!
if not "!t!" == "" if not "!t!" == " " echo !t!))
pause&exit
:split
set c=-1&set s=%~1
:next
set /a c+=1
if not "!s:~%c%,1!" == "" (
set s_%2_%c%=!s:~%c%,1!
goto next
) else if %c% gtr %max% set max=%c%
写了个。完后参看前辈们写的,发觉和terse的接近了。

刚才试着处理1K左右的不同文本,私下觉得这个是最快的。

[ Last edited by dreamseed on 2008-4-23 at 08:28 PM ]



沉浸于脚本的流浪客。
纳须弥于芥子,容世界之脚本...
2008-4-23 19:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 18 楼』:  

有些特殊字符不支持

2008-4-24 21:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
amao
中级用户





积分 316
发帖 152
注册 2006-6-18
状态 离线
『第 19 楼』:  

仔细一看才明白你的意思。刚才回复出错。

[ Last edited by amao on 2008-4-25 at 10:08 AM ]

2008-4-25 10:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 20 楼』:  

写的太多了
@echo off&&setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (a.txt) do (
set str=%%i
set str=!str: =!&call :lp
)
pause
:lp
echo !str:~0,1!&set str=!str:~1!&if defined str goto :lp&goto :eof


2008-4-25 11:29
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 21 楼』:  回复17楼

君的代码处遇上%时会丢失.

我参考大家的写了一段,有处理空行时会出现重复的问题,
哪位帮解决一下:

@echo off & setlocal enabledelayedexpansion
set m=0&set n=0&set en=y

:angin
call :lp
set /a m+=1&if not defined endy goto :angin
pause&goto :eof

:lp
if !m!==0 (set skip= ) else (set skip="skip=%m% delims=")

for /f %skip% %%i in (a.txt) do (
set str=%%i
set str=!str:~ %n%,1!
if not defined str goto :eof
set en=n&if not "!str!"==" " echo !str!
goto :eof
)

set m=-1&set /a n+=1&if !en!==y set endy=q
set en=y&goto :eof

2009-1-3 02:24
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: