中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问怎样有条件将空格替换成逗号
作者:
标题: 请问怎样有条件将空格替换成逗号 上一主题 | 下一主题
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『楼 主』:  请问怎样有条件将空格替换成逗号

文本 a.txt

C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese  
123 56 我是谁中国人

处理后结果:b.txt

C,123,456,78
123,56,我是谁 中国人
123,56,I am chinese  
123,56,我是谁中国人

要求中文或英文部分中的空格不要替换成逗号,谢谢

2009-2-19 11:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 2 楼』:  

小弟也是最近对批处理感兴趣,真是博大精深。奥妙无穷啊。set if for 等命令还是有点晕乎。正则表达式等那就更..,不过我正在学习ing~~~

上面这个问题困扰我很久了,对高手可能是小菜小碟。请帮一下忙吧。

[ Last edited by sady2009 on 2009-2-19 at 12:31 ]

2009-2-19 12:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


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

把替换的规则详细的说遍
我发现用FR 正则替换都是一个头疼的问题




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

[b]看你妹啊[/b]


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

是不是每一行都由四个字符串组成:
11 22 33 44
像上面这种格式




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-2-19 12:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 5 楼』:  

谢谢楼上朋友关注!

可能我表达的是不是很清楚。详细再说一下,抱歉!

在A.txt 存在以下行的内容

C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese  
123 56 我是谁中国人
C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese  
123 56 我是谁中国人

内容是有规律可循的。包含c 开头和行, 和数字开头的行两种情况。

C 开头的行总共是四列,后三列是数字, 要求此行空格全部替换成","
数字开头的行要求将前两列的数字部分后边空格替换成","  ,之后的列是英文或中文也含有空格,这些空格保持不变,不要替换.

要求正确的结果如下:

处理后结果:b.txt

C,123,456,78
123,56,我是谁 中国人
123,56,I am chinese  
123,56,我是谁中国人
处理后结果:b.txt
C,123,456,78
123,56,我是谁 中国人
123,56,I am chinese  
123,56,我是谁中国人

请问批处理该怎么样写呢?


下面是我自己写的,不合要求,见笑了
for /f "tokens=1,2,3,4 delims= " %%i IN (a.txt) DO @if %%i==C (echo %%i,%%j,%%k,%%l >>b.txt) else @echo %%i,%%j,%%k >>b.txt

123 56 I am chinese  变成了 123,56,I 了, 我需要的结果是123,56,I am chinese.

请高手指点一二。谢谢

[ Last edited by sady2009 on 2009-2-19 at 13:32 ]

2009-2-19 13:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 6 楼』:  


@echo off
for /f "tokens=1,2,3,*" %%i in ('more +9^<%~fs0') do (
  if /i "%%i"=="c" (
    echo %%i,%%j,%%k,%%l
  ) else (
    echo %%i,%%j,%%k %%l
  )
)
pause&goto :eof
C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese  
123 56 我是谁中国人
C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese  
123 56 我是谁中国人


   此帖被 +1 点积分    点击查看详情   
评分人:【 sady2009 分数: +1  时间:2009-2-19 13:59


2009-2-19 13:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 7 楼』:  

谢谢,

可以解释一下吗? 或给个地址。

2009-2-19 13:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pkto
初级用户





积分 62
发帖 62
注册 2007-7-14
状态 离线
『第 8 楼』:  

moniuming兄的确很强大。

也许是对fr的了解还不够深入,但就目前学习的感觉,fr的缺点就是环境必须很规则,如果环境不规则(例如字符的数量、顺序、各类、位置等一旦杂乱),局限性就很大

2009-10-22 21:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: