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

[文本处理] 批处理怎样删除文字纵列重复的行?

请教我有一文本内有纵列的行要判断处理

第一个问题

找到重覆两个的<MATab>
  1. <MATab>
  2. <MATab>
复制代码
就删除掉其中一个,仅保留一个<MATab>
  1. <MATab>
复制代码
第二个问题

判断文本内如过超过两个</tabID>

就全部删除掉,仅保留文本最底部那一个</tabID>

第三个问题
本地目录,合并a.txt內容到b.txt


=========================
例举其中一段

问题1
处理前:

  <MATab>
    <tabID>tbp2</tabID>
    <tabName>尚未</tabName>
  </MATab>
  <MATab>
  <MATab>
   
<tabID>tbp1</tabID>
    <tabName>尚未</tabName>
  </MATab>

处理后:

  <MATab>
    <tabID>tbp2</tabID>
    <tabName>尚未</tabName>
  </MATab>
  <MATab>   
<tabID>tbp1</tabID>
    <tabName>尚未</tabName>
  </MATab>

问题2
处理前:

    <tabID>tbp3</tabID>   
<tabName>尚未</tabName>
  </MATab>
  <MATab>
    <tabID>tbp4</tabID>   
<tabName>尚未</tabName>
  </MATab>
  <MATab>
    <tabID>tbp5</tabID>   
<tabName>尚未</tabName>

处理后:

<tabID>tbp3
    <tabName>尚未</tabName>
  </MATab>
  <MATab>
    <tabID>tbp4
    <tabName>尚未</tabName>
  </MATab>
  <MATab>
    <tabID>tbp5</tabID>    
<tabName>尚未</tabName>

===============================

万分感谢,请求亲爱的众版友帮忙

本帖最后由 Hello123World 于 2011-5-28 16:29 编辑

我来回答第三个:
  1. @echo off
  2. copy /y a.txt+b.txt b.txt
复制代码
忘记加/y 参数了。

TOP

我来回答第三个:@echo off
copy a.txt+b.txt b.txt
Hello123World 发表于 2011-5-28 16:03

谢谢

批处理貌似对纵列不易处理啊@@

TOP

请楼主贴上文本具体样式。。。。
***共同提高***

TOP

本帖最后由 leo198444 于 2011-5-28 16:51 编辑

整个文本很多内容,要全部贴出来吗@@?

例举其中一段

问题1
处理前:

  <MATab>
    <tabID>tbp2</tabID>
    <tabName>尚未</tabName>
  </MATab>
  <MATab>
  <MATab>
   
<tabID>tbp1</tabID>
    <tabName>尚未</tabName>
  </MATab>

处理后:

  <MATab>
    <tabID>tbp2</tabID>
    <tabName>尚未</tabName>
  </MATab>
  <MATab>   
<tabID>tbp1</tabID>
    <tabName>尚未</tabName>
  </MATab>

问题2
处理前:

    <tabID>tbp3</tabID>   
<tabName>尚未</tabName>
  </MATab>
  <MATab>
    <tabID>tbp4</tabID>   
<tabName>尚未</tabName>
  </MATab>
  <MATab>
    <tabID>tbp5</tabID>   
<tabName>尚未</tabName>

处理后:

<tabID>tbp3
    <tabName>尚未</tabName>
  </MATab>
  <MATab>
    <tabID>tbp4
    <tabName>尚未</tabName>
  </MATab>
  <MATab>
    <tabID>tbp5</tabID>    
<tabName>尚未</tabName>

麻烦谢谢

TOP

请更新至顶楼。。。。
***共同提高***

TOP

本帖最后由 leo198444 于 2011-5-28 17:00 编辑

麻烦您了~~蝙蝠侠

TOP

别欺负我啊~~蝙蝠侠大哥

您要我具体样式我也给了

您要我至顶楼我也至了

不会还要我瞌头请托吧

虽然我是孤苦无依的台湾人

但我为了批处理来这热爱祖国啊

还学习祖国的用语来发文


麻烦帮忙~~蝙蝠侠大哥

TOP

本帖最后由 zm900612 于 2011-5-28 18:57 编辑

问题一是仅删除相邻两行的<MATab>吗?而且这些<MATab>都是独占一行?如果真是如此,那倒不难:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do (
  3.    if "%%a"=="<MATab>" (set /a n+=1) else set n=
  4.    if !n! leq 1 echo %%a
  5. )
  6. pause
复制代码
问题二中的关键词如果一行最多只有一个,看上去也不是太难,不知是不是这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=:" %%a in ('findstr /n .* 1.txt') do (
  3.    set /a n+=1,h=%%a
  4. )
  5. if %n% geq 3 for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
  6.    set "tmp=%%b</tabID>"
  7.    if %%a neq %h% (
  8.       echo;!tmp:^</tabID^>=!
  9.    ) else echo;%%b
  10. )
  11. pause
复制代码

TOP

问题一是仅删除相邻两行的吗?而且这些都是独占一行?如果真是如此,那倒不难:@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (1.txt) do (
   if "%%a"=="" (set /a n+=1) else set n=
   ...
zm900612 发表于 2011-5-28 17:31


谢谢您啊

但是我只是一介新手

您帮我pause出来,我是看的很开心

但是我不懂处理后怎么输出啊

TOP

问题一和问题二是同时处理的吧?

TOP

问题一和问题二是同时处理的吧?
tmplinshi 发表于 2011-5-28 17:58



是啊是啊

小弟不希望是改天再处理

要一起处理! 谢谢!

TOP

本帖最后由 zm900612 于 2011-5-28 18:57 编辑

其实把那两个代码各运行一遍不就好了吗...
偷懒一下,简单合并代码,就不精简了
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (1.txt) do (
  3.    if "%%a"=="<MATab>" (set /a n+=1) else set m=
  4.    if !m! leq 1 echo %%a
  5. ))>tmp
  6. for /f "delims=:" %%a in ('findstr /n .* tmp') do (
  7.    set /a n+=1,h=%%a
  8. )
  9. if %n% geq 3 (
  10.    for /f "tokens=1* delims=:" %%a in ('findstr /n .* tmp') do (
  11.       set "tmp=%%b</tabID>"
  12.       if %%a neq %h% (
  13.          echo;!tmp:^</tabID^>=!
  14.       ) else echo;%%b
  15.    )
  16. )>结果.txt
  17. pause
复制代码

TOP

其实把那两个代码各运行一遍不就好了吗...
偷懒一下,简单合并代码,就不精简了@echo off&setlocal enabledelayedexpansion
(for /f "delims=" %%a in (1.txt) do (
   if "%%a"=="" (set /a n+=1) else set m=
...
zm900612 发表于 2011-5-28 18:19

谢谢

我执行后只跳出一个黑屏

啥都没改变

@@?

请测我附件

TOP

本帖最后由 zm900612 于 2011-5-28 18:58 编辑

我代码有一点错,'findstr /n .* tmp'漏了.*。
不过楼主的附件是utf-8格式的啊,恐怕没法直接处理,需要先转格式,否则处理汉字时会不正常。

TOP

返回列表