Board logo

标题: 将文本文件中的空格替换成|(已经解决) [打印本页]

作者: jinrich     时间: 2006-12-15 14:06    标题: 将文本文件中的空格替换成|(已经解决)

1.txt 里的内容为:
0           测量     1 小时      2006-12-13 00:00     简约
经p处理后生成2.txt
0|测量|1 小时|2006-12-13 00:00|简约

用下面的,问题解决了
@echo off

for /f "tokens=1-7" %%a in (d:\1.txt)  do  echo %%a^|%%b^%%c^  %%d^|%%e^  %%f^|%%g" >>2.txt
   
echo 2.txt done
pause >nul

就可以了,不过我的1.txt里字段太多了,有56个,26个字母不够用,你们有什么好的办法

我的解决方法:
@echo off
echo start to deal with 3.txt
echo.
echo waiting……

for /f "skip=1 tokens=1-25,*" %%a in (3.txt) do ( echo %%a^|%%b^|%%c^ %%d^|%%e^ %%f^|%%g^|%%h^ %%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v^|%%w^|%%x^|%%y^|%%z >>2.txt)
for /f "tokens=1-25,*" %%a in (2.txt) do ( echo %%a^ %%b^ %%c^|%%d^|%%e^|%%f^|%%g^|%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v%%w^|%%x%%y^|%%z >>22.txt)
for /f "tokens=1-16" %%a in (22.txt) do ( echo %%a^ %%b^ %%c%%d^|%%e%%f^|%%g%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o%%p >>222.txt)

echo 222.txt done
del /q 2.txt 22.txt
pause >nul
多谢大家的帮忙~

[ Last edited by namejm on 2006-12-25 at 08:29 AM ]
作者: jinrich     时间: 2006-12-15 14:35
自己做的 ,执行起来不行:
echo start to deal with 3.txt
echo.

setlocal enabledelayedexpansion
for /f "tokens=1-7" %%a in (d:\1.txt)
do (set char=|
set var=%%a!char!%%b!char!%%c! !%%d!char!%%e!char!%%f!char!%%g
echo !var!>>2.txt)
echo 2.txt done
pause >nul
作者: youxi01     时间: 2006-12-15 21:09
有两个小的错误:
1、P中的for语句不同于其它语言,for中的do不能另起一行;
  应该为:for /f "tokens=1-7" %%a in (d:\1.txt) do (
                    你的命令....)

2、set char=|应该改为:set “char=|” 或者使用转义字符:set char=^|
作者: ccwan     时间: 2006-12-15 21:14
试一下:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-7" %%a in (d:\1.txt) do (
       set var="%%a|%%b|%%c %%d|%%e %%f|%%g"
       set var=!var:~1,-1!
       >>2.txt echo !var!
)
echo 2.txt done
pause >nul

作者: jinrich     时间: 2006-12-15 22:23
谢谢,不过还是不行 ,2.txt 还是空的
作者: ccwan     时间: 2006-12-15 22:33
你的1.txt是在D盘吗?
作者: jinrich     时间: 2006-12-15 23:51
@echo off

for /f "tokens=1-7" %%a in (d:\1.txt)  do  echo %%a^|%%b^%%c^  %%d^|%%e^  %%f^|%%g" >>2.txt
   
echo 2.txt done
pause >nul

就可以了,不过我的1.txt里字段太多了,有56个,26个字母不够用,你们有什么好的办法
作者: zh159     时间: 2006-12-16 00:41
如果按楼主的格式:

  Quote:
0           测量     1 小时      2006-12-13 00:00     简约


@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%i in (1.txt) do (
  set N=%%i
  set N=!N:测量=^|测量^|!
  set N=!N:小时=小时^|!
  set N=!N:简约=^|简约!
  set N=!N:  =!
  set N=!N:^| =^|!
  set N=!N: ^|=^|!
  echo !N!)
pause

作者: lxmxn     时间: 2006-12-16 00:51

  试试下面这个:
@echo off
for /f "delims=" %%a in (d:\1.txt) do (
    setlocal enabledelayedexpansion
    set "str=%%a"
    set "str=!str:  = !"
    set "str=!str: =|!"
    echo !str!
    echo !str!>>d:\2.txt
    endlocal
    )
    pause
notepad.exe d:\2.txt
goto :eof

作者: zh159     时间: 2006-12-16 02:08


  Quote:
Originally posted by lxmxn at 2006-12-15 11:51:

  试试下面这个:[code]
@echo off
for /f "delims=" %%a in (d:\1.txt) do (
    setlocal enabledelayedexpansion
    set "str=%%a"
    set " ...

这个把“2006-12-13 00:00”分开了
作者: youxi01     时间: 2006-12-16 02:13
如果字段过多,就使用shift吧?
测试代码:
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do (
  call :test %%i
  echo "!str!")

pause>nul

:test
    if not "%1"=="" (
       set "str=!str!%1|"
       shift
       goto :test)
    goto :eof
测试结果:
1.txt中的东西:
0 1 2 3 4 5 6
7 8 9 10 11 12 12
执行之后:
"0|1|2|3|4|5|6|"
"0|1|2|3|4|5|6|7|8|9|10|11|12|12|"

作者: lxmxn     时间: 2006-12-16 02:37


  Quote:
Originally posted by zh159 at 2006-12-16 02:08:

这个把“2006-12-13 00:00”分开了


  如果要按照楼主的要求来,可能没有好的办法,因为楼主的字段比较多,而且什么时候加|符号没有什么规律可言,汗一个先……

作者: jinrich     时间: 2006-12-16 03:04
谢谢各位,现在已经好啦
作者: ccwan     时间: 2006-12-16 03:20
那请楼主把代码和1.txt内容贴出来,大家一起学习学习。
作者: jinrich     时间: 2006-12-16 03:58
我用的方法比较麻烦一点,自己想的,中间也吸取了大家的教导才写出来的:
@echo off
echo start to deal with 3.txt
echo.
echo waiting……

for /f "skip=1 tokens=1-25,*" %%a in (3.txt) do ( echo %%a^|%%b^|%%c^ %%d^|%%e^ %%f^|%%g^|%%h^ %%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v^|%%w^|%%x^|%%y^|%%z >>2.txt)
for /f "tokens=1-25,*" %%a in (2.txt) do ( echo %%a^ %%b^ %%c^|%%d^|%%e^|%%f^|%%g^|%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v%%w^|%%x%%y^|%%z >>22.txt)
for /f "tokens=1-16" %%a in (22.txt) do ( echo %%a^ %%b^ %%c%%d^|%%e%%f^|%%g%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o%%p >>222.txt)

echo 222.txt done
del /q 2.txt 22.txt
pause >nul

有什么能改进的还请指出来
作者: jinrich     时间: 2006-12-16 04:02
3.txt 的内容如下:
0           中继群入局话务测量     1 小时      2006-12-14 00:00     简约风格    0 js           否            准确          0           0               0           0           0               0                 0               0           0               0                 0               0             0               0                   0                         0                       0                             0                       0               0                     0                   0                       0                       0                     0                   0           0           247           247           0                 0                   0                 100.00 %        0.00 %                0.00 %      0.00 %      0.00 %        0.00                  0.00          0.00              0.00          0.00          0.00            0 %         
0           中继群入局话务测量     1 小时      2006-12-14 00:00     简约风格    1 nh     否            准确          762         707             132         111         85              20                0               0           4               287               11              1             0               0                   0                         0                       0                             1                       0               0                     0                   0                       0                       0                     347                 0           0           960           960           0                 0                   0                 100.00 %        0.00 %                17.32 %     14.57 %     55.64 %       18.14                 18.14         0.02              16.35         16.19         83.51           26 %
作者: zh159     时间: 2006-12-16 04:25
字段还真多啊-_-|||
作者: jmz573515     时间: 2006-12-25 21:19
真是高人,这复杂的代码也能写出来.学习!
作者: qzlsdlwb     时间: 2006-12-26 15:27
怎么才学会DOS?
作者: jmz573515     时间: 2006-12-27 00:14
揍个热闹
on error resume next
set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("1.txt",1)
do while file.AtEndOfStream <> True
a=file.readline
do until instr(a,"  ")=0
a=replace (a,"  "," ")
loop
b=b & replace(a," ","|")& vbcrlf
loop
file.close
set file=fso.createtextfile("222.txt")
file.write b
file.close
msgbox "文件处理完毕,请查看222.txt文件",48+4096,"操作成功"