标题: [文本处理] 批处理如何将文本指定位置的字符串(数字)进行替代? [打印本页]
作者: yonghuairuogu 时间: 2013-11-19 20:32 标题: 批处理如何将文本指定位置的字符串(数字)进行替代?
我想将第5-16行,21-32,,37-48.。。。行的第一列的1,2,。。。,12 替换为指定的相同的字符串 ZK2-3,请问该如何做?谢谢各位大神 了!
按所占字符(字节)来看的话,1,2,3,。。。12,占的为1-7字节,
SEISMIC_DATA_FILE_NAME: 3.dat
SHOT_LOCATION: 8.000
NUMBER_OF_RECEIVERS: 12
# X T Layer
1 1.000 0.003164 1
2 2.000 0.003108 1
3 3.000 0.003108 1
4 4.000 0.003198 1
5 5.000 0.003220 1
6 6.000 0.003288 1
7 7.000 0.003423 1
8 8.000 0.003761 1
9 9.000 -999.031250 1
10 10.000 -999.031250 1
11 11.000 -999.031250 1
12 12.000 -999.031250 1
SEISMIC_DATA_FILE_NAME: 4.dat
SHOT_LOCATION: 7.000
NUMBER_OF_RECEIVERS: 12
# X T Layer
1 1.000 0.003356 1
2 2.000 0.003254 1
3 3.000 0.003164 1
4 4.000 0.003130 1
5 5.000 0.003130 1
6 6.000 0.003220 1
7 7.000 0.003367 1
8 8.000 0.003952 1
9 9.000 -999.031250 1
10 10.000 -999.031250 1
11 11.000 -999.031250 1
12 12.000 -999.031250 1
SEISMIC_DATA_FILE_NAME: 5.dat
SHOT_LOCATION: 6.000
NUMBER_OF_RECEIVERS: 12
# X T Layer
1 1.000 0.003018 1
2 2.000 0.002939 1
3 3.000 0.002939 1
4 4.000 0.003007 1
5 5.000 0.002961 1
6 6.000 0.003085 1
7 7.000 0.003198 1
8 8.000 -999.031250 1
9 9.000 -999.031250 1
10 10.000 -999.031250 1
11 11.000 -999.031250 1
12 12.000 -999.031250 1
作者: yonghuairuogu 时间: 2013-11-19 21:27
我自己写了个,但是不对,请问该如何修改呢?
@echo off & setlocal enabledelayedexpansion
set "n=-1"
(for /f "delims= , tokens=1-3" %%a in (all.txt) do (
set /a n+=1,m=n%%16
if !m! lss 4 echo,%%a%%b%%c
if !m! geq 4 (
set a=zk2-3
echo,%%a%%b%%c
)
))>b.txt
pause
作者: apang 时间: 2013-11-19 22:05
回复 2# yonghuairuogu - @echo off & setlocal enabledelayedexpansion
- set /a "n=-1"
- (for /f "delims=" %%a in (all.txt) do (
- set /a "n+=1,m=n%%16"
- if !m! geq 4 (
- for /f "tokens=1*" %%b in ("%%a") do (
- echo, zk2-3 %%c
- )
- ) else echo,%%a
- ))>b.txt
- pause
复制代码
作者: yonghuairuogu 时间: 2013-11-19 22:08
回复 3# apang
非常感谢,太牛了!
作者: foxJL 时间: 2013-11-19 22:11
这样可以吗- @echo off
- for /f "tokens=1* delims= " %%i in (a.txt) do (
- set/a 1/%%i 2>nul && echo ZK2-3 %%j || echo,%%i %%j
- )>>b.txt
- pause
复制代码
作者: yonghuairuogu 时间: 2013-11-19 22:13
如何去掉后面第4列的 Layer,1,1,1.。。1这一列呢?得到如下:
SEISMIC_DATA_FILE_NAME: 3.dat
SHOT_LOCATION: 8.000
NUMBER_OF_RECEIVERS: 12
# X T
zk2-3 1.000 0.003164
zk2-3 2.000 0.003108
zk2-3 3.000 0.003108
zk2-3 4.000 0.003198
zk2-3 5.000 0.003220
zk2-3 6.000 0.003288
zk2-3 7.000 0.003423
zk2-3 8.000 0.003761
zk2-3 9.000 -999.031250
zk2-3 10.000 -999.031250
zk2-3 11.000 -999.031250
zk2-3 12.000 -999.031250
SEISMIC_DATA_FILE_NAME: 4.dat
SHOT_LOCATION: 7.000
NUMBER_OF_RECEIVERS: 12
# X T
zk2-3 1.000 0.003356
zk2-3 2.000 0.003254
zk2-3 3.000 0.003164
zk2-3 4.000 0.003130
zk2-3 5.000 0.003130
zk2-3 6.000 0.003220
zk2-3 7.000 0.003367
zk2-3 8.000 0.003952
zk2-3 9.000 -999.031250
zk2-3 10.000 -999.031250
zk2-3 11.000 -999.031250
zk2-3 12.000 -999.031250
SEISMIC_DATA_FILE_NAME: 5.dat
SHOT_LOCATION: 6.000
NUMBER_OF_RECEIVERS: 12
# X T
zk2-3 1.000 0.003018
zk2-3 2.000 0.002939
zk2-3 3.000 0.002939
zk2-3 4.000 0.003007
zk2-3 5.000 0.002961
zk2-3 6.000 0.003085
zk2-3 7.000 0.003198
zk2-3 8.000 -999.031250
zk2-3 9.000 -999.031250
zk2-3 10.000 -999.031250
zk2-3 11.000 -999.031250
zk2-3 12.000 -999.031250
SEISMIC_DATA_FILE_NAME: 6.dat
SHOT_LOCATION: 5.000
NUMBER_OF_RECEIVERS: 12
# X T
zk2-3 1.000 0.003153
zk2-3 2.000 0.003153
zk2-3 3.000 0.003130
zk2-3 4.000 0.003175
zk2-3 5.000 0.003130
zk2-3 6.000 0.003175
zk2-3 7.000 0.003277
zk2-3 8.000 0.003401
zk2-3 9.000 -999.031250
zk2-3 10.000 -999.031250
zk2-3 11.000 -999.031250
zk2-3 12.000 -999.031250
SEISMIC_DATA_FILE_NAME: 7.dat
SHOT_LOCATION: 4.000
NUMBER_OF_RECEIVERS: 12
# X T
zk2-3 1.000 0.003007
zk2-3 2.000 0.002984
zk2-3 3.000 0.002984
zk2-3 4.000 0.002950
zk2-3 5.000 0.002883
zk2-3 6.000 0.002950
zk2-3 7.000 0.003018
zk2-3 8.000 0.003401
zk2-3 9.000 -999.031250
zk2-3 10.000 -999.031250
zk2-3 11.000 -999.031250
zk2-3 12.000 -999.031250
SEISMIC_DATA_FILE_NAME: 8.dat
SHOT_LOCATION: 3.000
NUMBER_OF_RECEIVERS: 12
# X T
zk2-3 1.000 0.003322
zk2-3 2.000 0.003288
zk2-3 3.000 0.003254
zk2-3 4.000 0.003232
zk2-3 5.000 0.003142
zk2-3 6.000 0.003175
zk2-3 7.000 0.003277
zk2-3 8.000 0.003367
zk2-3 9.000 -999.031250
zk2-3 10.000 -999.031250
zk2-3 11.000 -999.031250
zk2-3 12.000 -999.031250
SEISMIC_DATA_FILE_NAME: 9.dat
SHOT_LOCATION: 2.000
NUMBER_OF_RECEIVERS: 12
# X T
zk2-3 1.000 0.003266
zk2-3 2.000 0.003232
zk2-3 3.000 0.003187
zk2-3 4.000 0.003153
zk2-3 5.000 0.003052
zk2-3 6.000 0.003097
zk2-3 7.000 0.003198
zk2-3 8.000 -999.031250
zk2-3 9.000 -999.031250
zk2-3 10.000 -999.031250
zk2-3 11.000 -999.031250
zk2-3 12.000 -999.031250
作者: terse 时间: 2013-11-19 22:49
本帖最后由 terse 于 2013-11-19 22:53 编辑
根据你2楼改的- @echo off & setlocal enabledelayedexpansion
- set "n=-1"
- for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
- for /f "tokens=1-3" %%a in (all.txt) do (
- set /a n+=1,m=n%%16
- if !m! geq 4 (
- echo zk2-3%tab%%%b%tab%%%c
- ) else echo,%%a%tab%%%b%tab%%%c
- )
- pause
复制代码
作者: yonghuairuogu 时间: 2013-11-20 09:48
回复 7# terse
非常感谢!
作者: yonghuairuogu 时间: 2013-11-20 20:50
回复 5# foxJL
你的这个代码也是正确,并且更简洁,但如何根据你的代码,进一步实现去掉第4列的 Layer,1,1,1.。。1这一列呢?
作者: foxJL 时间: 2013-11-20 21:02
回复 9# yonghuairuogu - @echo off
- for /f "tokens=1-3 delims= " %%i in (a.txt) do (
- set/a 1/%%i 2>nul && echo, ZK2-3 %%j %%k||(echo, %%i %%j %%k)
- )>>b.txt
- pause
复制代码
作者: yonghuairuogu 时间: 2013-11-20 21:07
回复 10# foxJL
非常感谢!!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |