中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 如何将多行数据变成一行? 上一主题 | 下一主题
shelby
新手上路





积分 3
发帖 3
注册 2009-1-21
状态 离线
『楼 主』:  如何将多行数据变成一行?

数据如下:

DESCRIPTION          SUM(ENTRY021)                                             
-------------------- -------------                                             
东莞东                       73700                                             
广州                        225071                                             
广州东                      122342                                             
深圳                        105813                                             
深圳西                       40930                                             

已选择5行。

希望得出如下的结果:
东莞东73700,广州东225071,深圳105813,深圳西40930。

2009-1-22 14:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lihan584
新手上路





积分 11
发帖 10
注册 2009-1-14
状态 离线
『第 2 楼』:  

::ywj.txt是原文件,bcwj.txt是将要保存的文件
@echo off
FOR /F "tokens=1,2 delims= " %%a in (ywj.txt) do set /p jg=%%a%%b,<nul>>bcwj.txt
pause

2009-1-22 15:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
shelby
新手上路





积分 3
发帖 3
注册 2009-1-21
状态 离线
『第 3 楼』:  

非常感谢!我知道前2行可以通过 skip=3 来去掉。但是还有点小问题就是最后一行的数据(已选择5行。)如何去掉?

2009-1-22 16:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 4 楼』:  

用type xxx.txt |findstr /rc:"[0-9]*" 过滤一次




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-1-22 17:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 5 楼』:  


@echo off
for /f "skip=3 tokens=1,2" %%a in (a.txt) do (
  set /a "n+=1,1/(5-n)" 2>nul || echo %%a%%b。>>a_new.txt && exit /b
  set /p =%%a%%b,<nul>>a_new.txt
)


2009-1-22 17:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
shelby
新手上路





积分 3
发帖 3
注册 2009-1-21
状态 离线
『第 6 楼』:  

楼上的强!do里面的命令好多看不懂,能够解释一下?呵呵。。另外,这些都是在循环里面控制输出的,能否将结果放在一个变量中,然后在循环外引用?

2009-1-22 18:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 7 楼』:  Re 6楼

set /a n+=1 变量 n 的数值加 1
set /a 1/(5-n) 为了判断行数。当除数为零时导致出错,然后就会执行 || 后的命令。 (参考: CMD/DOS下符号的作用参考)
2>nul “标准错误输出”输出到空设备 (参考: 重定向中的秘密)
set /p =%%a%%b,<nul>>a_new.txt 以空设备作为输入源,代替了从键盘输入,从而语句结束。因为没有输入回车符,所以不会换行。

------------------

将结果放到变量中:
@echo off
setlocal enabledelayedexpansion
for /f "skip=3 tokens=1,2" %%a in (a.txt) do (
  set /a n+=1
  if !n!==5 set "str=!str!%%a%%b。" & goto Next
  set "str=!str!%%a%%b,"
)

:Next
echo %str%
pause
[ Last edited by tireless on 2009-1-22 at 19:43 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 pkto 分数: +1  时间:2009-1-22 21:42


2009-1-22 18:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 8 楼』:  在2楼上增强就可以了

@echo off
FOR /F "tokens=1,2 delims= " %%a in (ywj.txt) do if "%%a"=="已选择5行。" exit&set /p jg=%%a%%b,<nul>>bcwj.txt
pause



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-1-23 00:24
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: