中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-09 00:19
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 【讨论】一行分成多行
可打印版本  1,780 / 15
第1楼 plp626 发表于 2008-05-31 01:24
银牌会员 发帖 1,020 积分 2,278
【讨论】一行分成多行
论坛里不乏多行拼接成一行的,偶数行奇数行拼接的代码
但一行分成多行的代码我至今没发现,我不是指那个for+delims

给个测试样本:



以分号为分割符把上面的但行分成多行
要求:代码要具有通用性,可以生产临时文件。。。

6楼代码比较符合要求-----echo\替换行标志,很有思想。大家帮我加个分,我每分了。。。
8楼代码把变量用得也不错,很欣赏。。。以后那个shift+goto多行输出可以用for代替了(思想比较像4楼)大家也加个分吧。。。

仔细搜索了下,有类似问题已经被讨论过了,不好意思,算是重复贴了,

http://www.cn-dos.net/forum/viewthread.php?tid=35438单行拆分,里面代码思想只得借鉴。。。。
-----------------------------------------------------
题外话:
如果不是cmd痴迷者,为了目的实现大家确实得学学外部工具了
就这个样本:
用sed是如此地简洁高效:


[ Last edited by plp626 on 2008-5-31 at 02:56 AM ]
第2楼 plp626 发表于 2008-05-31 01:27
银牌会员 发帖 1,020 积分 2,278
说白了就是告诉cmd将“;”当作换行符号

除了set 截取 if 判断";"可有它发?

怎么用换行符替换“;”?
第3楼 26933062 发表于 2008-05-31 01:31
银牌会员 发帖 879 积分 2,268
第4楼 plp626 发表于 2008-05-31 01:41
银牌会员 发帖 1,020 积分 2,278
针对这个样本,我的代码:
str=test string;
str=;%str%
for /f "delims=" %%a in ("%str;="%")do call:arr %%a
pause
:arr
if %~1.==. goto:eof
echo\%1>>tmp.txt
shift
goto:arr

[ Last edited by plp626 on 2008-5-31 at 01:44 AM ]
第5楼 plp626 发表于 2008-05-31 01:51
银牌会员 发帖 1,020 积分 2,278
re 26933062
兄的代码不错,有些时间不来这里看我写的代码竟然都。。。。不是P了
汗!
第6楼 26933062 发表于 2008-05-31 01:57
银牌会员 发帖 879 积分 2,268
再来一个


[ Last edited by 26933062 on 2008-5-31 at 01:58 AM ]
第7楼 plp626 发表于 2008-05-31 02:04
银牌会员 发帖 1,020 积分 2,278
上面6楼代码思想值得借鉴。。。
仔细看我上面发的代码其实是想这样:
set str=1 86.2;2 90.0;3 87.8;4 83.4;5 88.0;6 84.1;7 83.2;8 80.6;9 74.0;10 73.7;11 71.5;12 72.7;13 70.4;14 75.0;15 72.1;16 80.0;17 75.4;18 83.7;19 87.0;20 88.0;21 85.6;22 81.1;23 90.0;24 88.7;25 89.6;26 86.1;27 75.5;28 81.6;29 80.1;30 88.0;31 72.2;32 77.6;33 80.0;34 72.9;35 72.6;36 70.5;37 78.0;38 69.5;39 72.4;40 72.4;41 74.3;42 74.4;43 80.0;44 88.1;45 88.5;46 90.9;47 94.0;48 89.0;49 94.2;50 97.0;51 90.0;52 95.2;
set str=%str: =+%
set str=%str: =;%
for /f "delims=" %%a in ("%str%")do call:arr %%a
pause
:arr
if %1.==. goto:eof
set s=%1
echo\%s:+= %
shift
goto:arr
有些命令竟然那样用,犯晕了

[ Last edited by plp626 on 2008-5-31 at 02:06 AM ]
第8楼 lxmxn 发表于 2008-05-31 02:06
版主 发帖 4,938 积分 11,386
第9楼 26933062 发表于 2008-05-31 02:07
银牌会员 发帖 879 积分 2,268
没看懂,你这两句不矛盾吗?
set str=%str: =+%
set str=%str: =;%
第10楼 26933062 发表于 2008-05-31 02:10
银牌会员 发帖 879 积分 2,268
8 楼 巧妙啊!
第11楼 plp626 发表于 2008-05-31 02:15
银牌会员 发帖 1,020 积分 2,278
把空格换成+再把;换成空格
我写反了,真是不可原谅呵
其实还可以删掉那个替换分号的语句
@echo off
set str=1 86.2;2 90.0;3 87.8;4 83.4;5 88.0;6 84.1;7 83.2;8 80.6;9 74.0;10 73.7;11 71.5;12 72.7;13 70.4;14 75.0;15 72.1;16 80.0;17 75.4;18 83.7;19 87.0;20 88.0;21 85.6;22 81.1;23 90.0;24 88.7;25 89.6;26 86.1;27 75.5;28 81.6;29 80.1;30 88.0;31 72.2;32 77.6;33 80.0;34 72.9;35 72.6;36 70.5;37 78.0;38 69.5;39 72.4;40 72.4;41 74.3;42 74.4;43 80.0;44 88.1;45 88.5;46 90.9;47 94.0;48 89.0;49 94.2;50 97.0;51 90.0;52 95.2;
set str=%str: =+%
for /f "delims=" %%a in ("%str%")do call:arr %%a
pause
:arr
if %1.==. goto:eof
set s=%1
echo\%s:+= %
shift
goto:arr
第12楼 terse 发表于 2008-05-31 02:34
银牌会员 发帖 946 积分 2,404
一行分成多行论坛上应该有的吧 可能你没注意
第13楼 plp626 发表于 2008-05-31 02:42
银牌会员 发帖 1,020 积分 2,278
Originally posted by terse at 2008-5-31 02:34 AM:
一行分成多行论坛上应该有的吧 可能你没注意


恩,是我没认真搜索,以后注意。。。
第14楼 FQ 发表于 2008-05-31 11:12
社区乞丐 发帖 37 积分 -61
如果从通用性来说3楼的是最理想的,毕竟SET设置变量是有限制的,如果不计较这个限制可以更加简化


[ Last edited by FQ on 2008-5-31 at 11:14 AM ]
第15楼 WANKOILZ 发表于 2008-05-31 12:15
初级用户 发帖 89 积分 198 来自 重庆
3,6,8楼的都强,特别是6楼,不知道是怎么想出来的.11楼那个也够简洁.我也发一个,也算是一个方法:


[ Last edited by WANKOILZ on 2008-5-31 at 12:17 PM ]
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023