Board logo

标题: [已结]请求一个替换文本的批处理! [打印本页]

作者: terlutor     时间: 2008-10-16 05:36    标题: [已结]请求一个替换文本的批处理!

我有一个这样的文本文件123.txt:(注:“----------”线是我另外加上去的,不在文件中的!) ---------- @13-OCT-08 23:14:54 SHORT_VCC18_DDR2=3.762221(2,)R R199>8.361087K(8.5K,10.872K)R ~R199(R199) EXPECTED ACTUAL 200103-107|T:X10400:Y11075|10.KO,1pct ~ =200103-107|T:X10400:Y11075|10.KO,1pct ~CHAN A/E: OP_P2 CHAN C/G/GND: GND[3],VCC_12V[123] ~ R190=1.026289K(3,1.241K)R PS_OPEN=(-20M,20M)V ~ 13-OCT-08 23:16:21 BOARD E24 FAILED ~ /13-OCT-08 23:16:21 ---------- 我想用一个批处理把它变成下面的样子,如下: ---------- @13-OCT-08 23:14:54 SHORT_VCC18_DDR2=3.762221(2,)R R199>8.361087K(8.5K,10.872K)R R199(R199) EXPECTED ACTUAL 200103-107|T:X10400:Y11075|10.KO,1pct =200103-107|T:X10400:Y11075|10.KO,1pct CHAN A/E: OP_P2 CHAN C/G/GND: GND[3],VCC_12V[123] R190=1.026289K(3,1.241K)R PS_OPEN=(-20M,20M)V 13-OCT-08 23:16:21 ---------- 请问各位大虾,批处理能实现吗?另外文本的行数是不固定的,文本中日期和时间也是随机的,文本中间部分只要去掉“~”就可以了,文本最后7行样式是不变的,变的只是时间和日期,也只要保留时间和日期就可以了! 谢谢大家了!!! 我再用图片补充说明一下,下图中蓝色部分的字符就是我要删除的: 谢谢大家的帮忙! [ Last edited by HAT on 2008-10-27 at 09:38 ]

作者: moniuming     时间: 2008-10-16 09:31
findstr /v ~ 123.txt
不知道楼主说的最后7行是哪7行.

作者: terlutor     时间: 2008-10-17 00:33
Originally posted by moniuming at 2008-10-16 09:31:
findstr /v ~ 123.txt
不知道楼主说的最后7行是哪7行.
首先谢谢你的关注! 我指的7行是: ~ 13-OCT-08 23:16:21 BOARD E24 FAILED ~ /13-OCT-08 23:16:21 可能我表达得不是很清楚,我的意思是这7行只留下日期和时间,其它的全部删除!原贴上部分是原文件,下部分就是我要的结果。可能我的解释有点画蛇添足,倒把人弄糊涂了!

作者: ko20010214     时间: 2008-10-17 00:53
查找 ~ 用空格来替代它就可以吧? change 123.txt /form ~ /to " " change 这个软件在论坛里有。

作者: terlutor     时间: 2008-10-18 04:06
Originally posted by ko20010214 at 2008-10-17 00:53: 查找 ~ 用空格来替代它就可以吧? change 123.txt /form ~ /to " " change 这个软件在论坛里有。
谢谢,我试一下看行不行吧!不过我只想用一个批处理来完成!

作者: HAT     时间: 2008-10-18 12:37
@echo off
type nul>"%temp%\123_tmp.txt"
for /f "delims=:" %%a in ('findstr /n .* "123.txt"') do (
  set RowNum=%%a
)
set /a TarRow=RowNum-7
for /f "tokens=1* delims=:" %%a in ('findstr /n .* "123.txt"') do (
  if %%a leq %TarRow% (
    set "str=%%b"
    setlocal enabledelayedexpansion
    if "!str:~0,1!" equ "~" (
      echo.!str:~1!>>"%temp%\123_tmp.txt"
    ) else (
      echo.!str!>>"%temp%\123_tmp.txt"
    )
    endlocal
  )
)
findstr "^[0-1][0-9]-[A-Z][A-Z][A-Z]-[0-9][0-9]" "123.txt">>"%temp%\123_tmp.txt"
move /y "%temp%\123_tmp.txt" "123.txt"
[ Last edited by HAT on 2008-10-18 at 13:11 ]

作者: terse     时间: 2008-10-18 12:50
@echo off
cd.>b.txt
for /f "delims=" %%i in ('type "a.txt"^|find /v /c ""') do set /a n=%%i-5
    for /f "tokens=1* delims=:" %%i in ('findstr /n .* a.txt') do (
        setlocal enabledelayedexpansion
        if not "%%j"=="" (
        set str=%%j
        set str=!str:*^~=!
        >>b.txt echo.!str!
        if %%i equ %n% start b.txt&goto :eof
        )else >>b.txt echo.
)
pause

作者: terlutor     时间: 2008-10-19 04:22
Originally posted by HAT at 2008-10-18 12:37: [code]@echo off type nul>"%temp%\123_tmp.txt" for /f "delims=:" %%a in ('findstr /n .* "123.txt"') do ( set RowNum=%%a ) set /a TarRow=RowNum-7 for /f " ...
非常感谢! 但是还是有一点小小的问题,我想把文本最后框中的字符也删除掉,如下图: 那么代码应该怎么修改一下呢?谢谢!

作者: terlutor     时间: 2008-10-19 04:34
Originally posted by terse at 2008-10-18 12:50: [code] @echo off cd.>b.txt for /f "delims=" %%i in ('type "a.txt"^|find /v /c ""') do set /a n=%%i-5 for /f "tokens=1* delims=:" %%i in ('findstr ...
非常感谢! 但是还是有一点小小的问题,我想把文本最后框中的字符和最后一行那个“/”也删除掉,如下图: 另外在运行的时候会出现很多行“已经达到最大的 setlocal 递归层。”这句话,是不是我的文件太大(有90K,几千行),我原贴中我简化了的,那么代码应该怎么修改一下呢?自己太菜了,你的代码我还看不太懂,要慢慢研究一下,谢谢!

作者: HAT     时间: 2008-10-19 11:47    标题: Re 8楼

请在顶楼把自己的问题一次性描述清楚

作者: HAT     时间: 2008-10-19 11:48    标题: Re 9楼

参照6楼,给7楼的代码在合适的地方加上一句: endlocal

作者: terlutor     时间: 2008-10-20 23:07
Originally posted by HAT at 2008-10-19 11:47: 请在顶楼把自己的问题一次性描述清楚
谢谢你的关注!我已在顶楼加上了图片说明!请你再帮帮忙!谢谢!

作者: terse     时间: 2008-10-21 00:42
@echo off&setlocal enabledelayedexpansion
echo.1>nul 3>b.txt
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "a.txt"') do (
     set/a n=%%i-7
     if not "%%j"=="" set var=%%j
)
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "a.txt"') do (
       if not "%%j"=="" (
       set str=%%j
       set str=!str:*^~=!
       echo.!str!
       if %%i equ %n% echo !var:~1!&goto end
       )else echo.
)
:end
start notepad "b.txt"&exit

作者: terlutor     时间: 2008-10-22 03:21
Originally posted by terse at 2008-10-21 00:42: [code] @echo off&setlocal enabledelayedexpansion echo.1>nul 3>b.txt for /f "tokens=1* delims=:" %%i in ('findstr /n .* "a.txt"') do ( set/a n=%%i-7 if n ...
谢谢!Thank you very much! 非常感谢!这正是我想要的!可惜我水平不高,看不太懂!回头要好好研究研究了!这里还真是高手如云!佩服佩服!

作者: HAT     时间: 2008-10-22 09:53    标题: Re 14楼

Good luck! And enjoy your time in CN-DOS!
批处理的教学 www.cn-dos.net/forum ... 批处理最完整人性化教程 www.cn-dos.net/forum ... 批处理新手FAQ整理 www.cn-dos.net/forum ... 中国DOS联盟批处理室经典帖子合集 www.cn-dos.net/forum ...

作者: terlutor     时间: 2008-10-27 04:46    标题: 非常感谢!

非常感谢你提供链接!我又有得学了!