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

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

我有一个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输出

请问该怎么处理

谢谢!

请下载范例脚本

为什么删了<MATab>却不删<MAButton>

TOP

为什么删了却不删
zm900612 发表于 2011-6-5 22:00

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

但因为这是特殊XML文本

如果不单独删除掉<MATab>,软件就无法运行

TOP

能否在顶楼上传一个UTF-8格式的文件供大家测试?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

能否在顶楼上传一个UTF-8格式的文件供大家测试?
Batcher 发表于 2011-6-5 22:05


已上传了

TOP

看不懂楼主所举例子中的内在逻辑

TOP

3# leo198444


问题不是在for里面是否容易处理
关键在于:
<MATab>和<MAButton>同样都是在<tabID>tbp0</tabID>的上一行,为何区别对待?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

3# leo198444


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


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

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

我用NSIS封装软件虽然不用烦恼编码问题,但找不到方法处理

TOP

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

但<tabID>tbp0</tabID>这个字符串不止一个,如果要单独删除<MATab>这个字符串,就不能以<tabID>tbp0</tabID>作为分隔符
额滴个神啊,实在搞不懂你着两个要求是怎样和谐并存的。
猜一下吧:
如果发现<tabID>tbp0</tabID>的上一行是<MATab>,就把<MATab>删掉。
是这个意思不?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

额滴个神啊,实在搞不懂你着两个要求是怎样和谐并存的。
猜一下吧:
如果发现tbp0的上一行是,就把删掉。
是这个意思不?
Batcher 发表于 2011-6-5 22:25


是的

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

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

就是这样处理

TOP

额滴个神啊

这句很有趣

原来你们也会台湾国语

TOP

既然两组关键词都是单字节字符,那可以这样:
  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
复制代码

TOP

返回列表