找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34887|回复: 11

[文本处理] 批处理UTF8文本找到特定字符后删除上一行

[复制链接]
发表于 2011-6-5 21:49:01 | 显示全部楼层 |阅读模式
我有一个UTF8文本,假设为A.TXT

希望处理它后不产生乱码,而且以下的文本格式都是纵列的

处理前:

  <MATab>  
<tabID>tbp0</tabID>
  <tabName>中文化</tabName>
<MAButton>
      <tabID>tbp0</tabID>     
<buttonID>btnMAQ</buttonID>

我希望找到文本里<tabID>tbp0</tabID>这个字符串,然后删除这个字符串的上一行

处理后:

    <tabID>tbp0</tabID>
  <tabName>中文化</tabName>
<MAButton>
      <tabID>tbp0</tabID>      
<buttonID>btnMAQ</buttonID>


但<tabID>tbp0</tabID>这个字符串不止一个,如果要单独删除<MATab>这个字符串,就不能以<tabID>tbp0</tabID>作为分隔符

还有一个小请求,希望文本处理以后,可以一样在A.TXT输出

请问该怎么处理

谢谢!

请下载范例脚本
发表于 2011-6-5 22:00:48 | 显示全部楼层
为什么删了<MATab>却不删<MAButton>
 楼主| 发表于 2011-6-5 22:05:31 | 显示全部楼层
为什么删了却不删
zm900612 发表于 2011-6-5 22:00

我知道这在FOR逻辑里不合理且不好处理

但因为这是特殊XML文本

如果不单独删除掉<MATab>,软件就无法运行
发表于 2011-6-5 22:05:39 | 显示全部楼层
能否在顶楼上传一个UTF-8格式的文件供大家测试?
 楼主| 发表于 2011-6-5 22:10:46 | 显示全部楼层
能否在顶楼上传一个UTF-8格式的文件供大家测试?
Batcher 发表于 2011-6-5 22:05


已上传了
发表于 2011-6-5 22:12:12 | 显示全部楼层
看不懂楼主所举例子中的内在逻辑
发表于 2011-6-5 22:14:40 | 显示全部楼层
3# leo198444


问题不是在for里面是否容易处理
关键在于:
<MATab>和<MAButton>同样都是在<tabID>tbp0</tabID>的上一行,为何区别对待?
 楼主| 发表于 2011-6-5 22:20:42 | 显示全部楼层
3# leo198444


问题不是在for里面是否容易处理
关键在于:
和同样都是在tbp0的上一行,为何区别对待?
Batcher 发表于 2011-6-5 22:14


这就讨论到软件运行的原理了
因为<MAButton>是包含子选单
<MATab>是包含主选单

如果更简单说
就是我要把<MATab>删除,让软体变子选单就对了@@

我用NSIS封装软件虽然不用烦恼编码问题,但找不到方法处理
发表于 2011-6-5 22:25:10 | 显示全部楼层
我希望找到文本里<tabID>tbp0</tabID>这个字符串,然后删除这个字符串的上一行

但<tabID>tbp0</tabID>这个字符串不止一个,如果要单独删除<MATab>这个字符串,就不能以<tabID>tbp0</tabID>作为分隔符
额滴个神啊,实在搞不懂你着两个要求是怎样和谐并存的。
猜一下吧:
如果发现<tabID>tbp0</tabID>的上一行是<MATab>,就把<MATab>删掉。
是这个意思不?
 楼主| 发表于 2011-6-5 22:28:00 | 显示全部楼层
额滴个神啊,实在搞不懂你着两个要求是怎样和谐并存的。
猜一下吧:
如果发现tbp0的上一行是,就把删掉。
是这个意思不?
Batcher 发表于 2011-6-5 22:25


是的

因为NSIS只能对横列文本作处理

所以我逻辑上解释不正确,很抱歉

就是这样处理
 楼主| 发表于 2011-6-5 22:37:49 | 显示全部楼层
额滴个神啊

这句很有趣

原来你们也会台湾国语
发表于 2011-6-6 12:32:42 | 显示全部楼层
既然两组关键词都是单字节字符,那可以这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. chcp 437 >nul
  3. (for /f "delims=" %%a in (leo1984.TXT) do (
  4.         for /f "tokens=1*" %%b in ("!last!,%%a") do (
  5.                 if "%%b%%c" neq "<MATab>,<tabID>tbp0</tabID>" echo;!last!
  6.         )
  7.         set last=%%a
  8. )
  9. echo;!last!)>b.txt
  10. more +1 b.txt>a.txt
  11. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:49 , Processed in 0.030243 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表