Board logo

标题: 请问怎样有条件将空格替换成逗号 [打印本页]

作者: sady2009     时间: 2009-2-19 11:45    标题: 请问怎样有条件将空格替换成逗号

文本 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,我是谁中国人

要求中文或英文部分中的空格不要替换成逗号,谢谢
作者: sady2009     时间: 2009-2-19 12:29
小弟也是最近对批处理感兴趣,真是博大精深。奥妙无穷啊。set if for 等命令还是有点晕乎。正则表达式等那就更..,不过我正在学习ing~~~

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

[ Last edited by sady2009 on 2009-2-19 at 12:31 ]
作者: yishanju     时间: 2009-2-19 12:41
把替换的规则详细的说遍
我发现用FR 正则替换都是一个头疼的问题
作者: yishanju     时间: 2009-2-19 12:43
是不是每一行都由四个字符串组成:
11 22 33 44
像上面这种格式
作者: sady2009     时间: 2009-2-19 13:00
谢谢楼上朋友关注!

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

在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 ]
作者: moniuming     时间: 2009-2-19 13:48

@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 我是谁中国人

作者: sady2009     时间: 2009-2-19 13:59
谢谢,

可以解释一下吗? 或给个地址。
作者: pkto     时间: 2009-10-22 21:01
moniuming兄的确很强大。

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