中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 【讨论】一行分成多行 上一主题 | 下一主题
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『楼 主』:  【讨论】一行分成多行



  Quote:
论坛里不乏多行拼接成一行的,偶数行奇数行拼接的代码
但一行分成多行的代码我至今没发现,我不是指那个for+delims

给个测试样本:
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;
以分号为分割符把上面的但行分成多行
要求:代码要具有通用性,可以生产临时文件。。。

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

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

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

sed s/;/\n/g a.txt


[ Last edited by plp626 on 2008-5-31 at 02:56 AM ]



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-31 01:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 2 楼』:  

说白了就是告诉cmd将“;”当作换行符号

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

怎么用换行符替换“;”?



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-31 01:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 3 楼』:  


@echo off
for /f "delims=" %%a in (a.txt) do call :loop "%%a"
pause
:loop
for /f "tokens=1* delims=;" %%i in ("%~1") do (
   echo %%i
   if not "%%j"=="" call :loop "%%j"
)
goto :eof


   此帖被 +25 点积分         点击查看详情   
评分人:【 plp626 分数: +15  时间:2008-5-31 01:51
评分人:【 WANKOILZ 分数: +2  时间:2008-5-31 11:53
评分人:【 moniuming 分数: +8  时间:2008-5-31 14:47




致精致简!
2008-5-31 01:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 4 楼』:  

针对这个样本,我的代码:
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 ]



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-31 01:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 5 楼』:  

re 26933062
兄的代码不错,有些时间不来这里看我写的代码竟然都。。。。不是P了
汗!



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-31 01:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 6 楼』:  

再来一个
@echo off
for /f "delims=" %%a in (a.txt) do call :loop "%%a"
pause
:loop
set str=%~1
set str=%str:;=^&echo\%
echo %str%
goto :eof
[ Last edited by 26933062 on 2008-5-31 at 01:58 AM ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 WANKOILZ 分数: +2  时间:2008-5-31 11:55




致精致简!
2008-5-31 01:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 7 楼』:  

上面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 ]



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-31 02:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  


@echo off & Setlocal EnableDelayedExpansion

for /f "delims=" %%a in (cn-dos.txt) do (
        set "string=%%a"
        for %%b in ("!string:;=" "!") do (echo.%%~b)
)


2008-5-31 02:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 9 楼』:  

没看懂,你这两句不矛盾吗?
set str=%str: =+%
set str=%str: =;%



致精致简!
2008-5-31 02:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 10 楼』:  

8 楼 巧妙啊!



致精致简!
2008-5-31 02:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 11 楼』:  

把空格换成+再把;换成空格
我写反了,真是不可原谅呵
其实还可以删掉那个替换分号的语句
@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



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-31 02:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 12 楼』:  

一行分成多行论坛上应该有的吧  可能你没注意



简单!简单!再简单!
2008-5-31 02:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by terse at 2008-5-31 02:34 AM:
一行分成多行论坛上应该有的吧  可能你没注意

恩,是我没认真搜索,以后注意。。。



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-31 02:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
FQ
社区乞丐





积分 -61
发帖 37
注册 2008-4-19
状态 离线
『第 14 楼』:  

如果从通用性来说3楼的是最理想的,毕竟SET设置变量是有限制的,如果不计较这个限制可以更加简化
@echo off&setlocal
set/p a=<1.txt
for %%b in ("%a:;=" "%") do echo.%%~b
[ Last edited by FQ on 2008-5-31 at 11:14 AM ]

2008-5-31 11:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 15 楼』:  

3,6,8楼的都强,特别是6楼,不知道是怎么想出来的.11楼那个也够简洁.我也发一个,也算是一个方法:
@echo off
for /f "delims=" %%i in (1.txt) do (
set "str=%%i"&call :loop
)
pause

:loop
set tmp=%str:*;=%
if not defined tmp (echo %str:~0,-1%&goto :eof)
call set mystr=%%str:%tmp%=%%
echo %mystr:~0,-1%&set str=%tmp%
if defined str goto loop
[ Last edited by WANKOILZ on 2008-5-31 at 12:17 PM ]

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


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



论坛跳转: