[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何将文本指定位置的字符串(数字)进行替代?

我想将第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

我自己写了个,但是不对,请问该如何修改呢?
@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

TOP

回复 2# yonghuairuogu
  1. @echo off & setlocal enabledelayedexpansion
  2. set /a "n=-1"
  3. (for /f "delims=" %%a in (all.txt) do (
  4.     set /a "n+=1,m=n%%16"
  5.     if !m! geq 4 (
  6.         for /f "tokens=1*" %%b in ("%%a") do (
  7.             echo,    zk2-3      %%c
  8.         )
  9.     ) else echo,%%a
  10. ))>b.txt
  11. pause
复制代码
1

评分人数

TOP

回复 3# apang


    非常感谢,太牛了!

TOP

这样可以吗
  1. @echo off
  2. for /f "tokens=1* delims= " %%i in (a.txt) do (
  3.   set/a 1/%%i 2>nul && echo ZK2-3     %%j || echo,%%i     %%j
  4. )>>b.txt
  5. pause
复制代码

TOP

如何去掉后面第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

TOP

本帖最后由 terse 于 2013-11-19 22:53 编辑

根据你2楼改的
  1. @echo off & setlocal enabledelayedexpansion
  2. set "n=-1"
  3. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  4. for /f "tokens=1-3" %%a in (all.txt) do (
  5.     set /a n+=1,m=n%%16
  6.     if !m! geq 4 (
  7.        echo zk2-3%tab%%%b%tab%%%c
  8.     ) else echo,%%a%tab%%%b%tab%%%c
  9. )
  10. pause
复制代码
1

评分人数

TOP

回复 7# terse


    非常感谢!

TOP

回复 5# foxJL


    你的这个代码也是正确,并且更简洁,但如何根据你的代码,进一步实现去掉第4列的 Layer,1,1,1.。。1这一列呢?

TOP

回复 9# yonghuairuogu
  1. @echo off
  2. for /f "tokens=1-3 delims= " %%i in (a.txt) do (
  3.   set/a 1/%%i 2>nul && echo,   ZK2-3     %%j      %%k||(echo,   %%i             %%j             %%k)
  4. )>>b.txt
  5. pause
复制代码

TOP

回复 10# foxJL


    非常感谢!!!

TOP

返回列表