|
jinrich
初级用户
积分 26
发帖 11
注册 2006-12-15
状态 离线
|
『楼 主』:
将文本文件中的空格替换成|(已经解决)
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 ]
|
|
2006-12-15 14:06 |
|
|
jinrich
初级用户
积分 26
发帖 11
注册 2006-12-15
状态 离线
|
『第
2 楼』:
自己做的 ,执行起来不行:
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
|
|
2006-12-15 14:35 |
|
|
youxi01
高级用户
积分 846
发帖 247
注册 2006-10-27 来自 湖南==》广东
状态 离线
|
『第
3 楼』:
有两个小的错误:
1、P中的for语句不同于其它语言,for中的do不能另起一行;
应该为:for /f "tokens=1-7" %%a in (d:\1.txt) do (
你的命令....)
2、set char=|应该改为:set “char=|” 或者使用转义字符:set char=^|
|
|
2006-12-15 21:09 |
|
|
ccwan
金牌会员
积分 2725
发帖 1160
注册 2006-9-23 来自 河北廊坊
状态 离线
|
『第
4 楼』:
试一下:
@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
|
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。 |
|
2006-12-15 21:14 |
|
|
jinrich
初级用户
积分 26
发帖 11
注册 2006-12-15
状态 离线
|
『第
5 楼』:
谢谢,不过还是不行 ,2.txt 还是空的
|
|
2006-12-15 22:23 |
|
|
ccwan
金牌会员
积分 2725
发帖 1160
注册 2006-9-23 来自 河北廊坊
状态 离线
|
『第
6 楼』:
你的1.txt是在D盘吗?
|
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。 |
|
2006-12-15 22:33 |
|
|
jinrich
初级用户
积分 26
发帖 11
注册 2006-12-15
状态 离线
|
『第
7 楼』:
@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个字母不够用,你们有什么好的办法
|
|
2006-12-15 23:51 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
8 楼』:
如果按楼主的格式:
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
|
|
2006-12-16 00:41 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
9 楼』:
试试下面这个:
@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
|
|
2006-12-16 00:51 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
10 楼』:
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”分开了
|
|
2006-12-16 02:08 |
|
|
youxi01
高级用户
积分 846
发帖 247
注册 2006-10-27 来自 湖南==》广东
状态 离线
|
『第
11 楼』:
如果字段过多,就使用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|"
|
|
2006-12-16 02:13 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
12 楼』:
Quote: | Originally posted by zh159 at 2006-12-16 02:08:
这个把“2006-12-13 00:00”分开了 |
|
如果要按照楼主的要求来,可能没有好的办法,因为楼主的字段比较多,而且什么时候加|符号没有什么规律可言,汗一个先……
|
|
2006-12-16 02:37 |
|
|
jinrich
初级用户
积分 26
发帖 11
注册 2006-12-15
状态 离线
|
『第
13 楼』:
谢谢各位,现在已经好啦
|
Just does it;I lov bat |
|
2006-12-16 03:04 |
|
|
ccwan
金牌会员
积分 2725
发帖 1160
注册 2006-9-23 来自 河北廊坊
状态 离线
|
『第
14 楼』:
那请楼主把代码和1.txt内容贴出来,大家一起学习学习。
|
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。 |
|
2006-12-16 03:20 |
|
|
jinrich
初级用户
积分 26
发帖 11
注册 2006-12-15
状态 离线
|
『第
15 楼』:
我用的方法比较麻烦一点,自己想的,中间也吸取了大家的教导才写出来的:
@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
有什么能改进的还请指出来
|
Just does it;I lov bat |
|
2006-12-16 03:58 |
|