中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 02:44
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 以解决:把文本内容横列变纵列。 查看 2,083 回复 20
16 发表于 2008-04-23 19:02 ·  中国 上海 上海地面通信息网络有限公司
中级用户
★★
积分 240
发帖 115
注册 2008-03-10 19:31
18年会员
UID 112561
性别 男
状态 离线
这里高手真多啊,偶刚学,还没入门呢。以后大家多多指教...
17 发表于 2008-04-23 19:53 ·  中国 广东 广州 越秀区 电信
初级用户
积分 38
发帖 10
注册 2007-10-01 13:25
18年会员
UID 98696
性别 男
来自 GZ
状态 离线
 @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 ]
沉浸于脚本的流浪客。
纳须弥于芥子,容世界之脚本...
18 发表于 2008-04-24 21:11 ·  中国 四川 泸州 联通
高级用户
★★★
积分 609
发帖 374
注册 2006-08-02 22:38
20年会员
UID 59720
状态 离线
有些特殊字符不支持
19 发表于 2008-04-25 10:02 ·  中国 江苏 南京 电信
中级用户
★★
积分 316
发帖 152
注册 2006-06-18 13:01
20年会员
UID 57204
性别 男
状态 离线
仔细一看才明白你的意思。刚才回复出错。

[ Last edited by amao on 2008-4-25 at 10:08 AM ]
20 发表于 2008-04-25 11:29 ·  中国 江苏 苏州 移动
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
写的太多了

@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
21 回复17楼 发表于 2009-01-03 02:24 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
君的代码处遇上%时会丢失.

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

@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
论坛跳转: