|
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
状态 离线
|
|
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 ]
|

致精致简! |
|
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 |
|