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

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

[复制链接]
发表于 2011-5-28 20:50:21 | 显示全部楼层
第一个问题和第二个问题
只能处理ansi编码文本。
:

  1. @echo off
  2. for /f "delims=:" %%i in ('findstr /ni "</tabID>" a.txt') do set /a h=%%i
  3. ((for /f "delims=" %%i in ('findstr /n .* a.txt') do (
  4.    set "str=%%i"
  5.    for /f "delims=:" %%a in ("%%i") do set /a i=%%a
  6.    setlocal enabledelayedexpansion
  7.    set "str=a!str:*:=!"
  8.    set "num=a!num:*:=!"
  9.    if "!str!"=="a" (echo;) else (
  10.       set var=!str: =!
  11.       if "!var!"=="a" (echo;) else (
  12.          if "!str!"=="a<MATab>" (
  13.             if not "!str!"=="!num!" echo;^<MATab^>
  14.          ) else (
  15.             set str=!str:~1!
  16.             if !h! neq !i! (
  17.                echo !str:^</tabID^>=!
  18.              ) else echo !str!
  19.          )
  20.       )
  21.     )
  22.     endlocal
  23.     set "num=%%i"
  24. ))>tem.txt
  25. start tem.txt
复制代码
发表于 2011-5-28 22:54:22 | 显示全部楼层
第一问:

  1. Dim fso, vbstr, regex
  2. Set fso = CreateObject("scripting.filesystemobject")
  3. vbstr = fso.OpenTextFile("a.txt", 1).ReadAll()
  4. Set regex = New RegExp
  5. regex.Global = True
  6. regex.Pattern = "([.\s]+)<MATab>[\s]+<MATab>([.\s]+)"
  7. vbstr = regex.Replace(vbstr, "$1<MATab>$2")
  8. fso.OpenTextFile("a.txt", 2, 1).Write vbstr
  9. Set fso = Nothing
  10. Set regex = Nothing
  11. MsgBox "ok"
复制代码
发表于 2011-5-29 10:45:25 | 显示全部楼层
本帖最后由 tmplinshi 于 2011-5-29 11:03 编辑
  1. @echo off

  2. rem 在这里设置要修改的文件
  3. set file="a.txt"

  4. set temp_file="%temp%\.tmp.%random%"
  5. set /a tag_num = 0, dup_line = 0

  6. rem 查找“</tabID>”的个数
  7. find /c /i "</tabID>" <%file% >%temp_file%
  8. set /p tag_num=<%temp_file%
  9. if %tag_num% gtr 2 set /a tag_num += 1

  10. rem 为了保留空行
  11. findstr /n .* %file% >%temp_file%

  12. (for /f "usebackq delims=" %%a in (%temp_file%) do (
  13.     set str=%%a
  14.     SetLocal EnableDelayedExpansion
  15.     set str= !str:*:=!
  16.     if /i "!str: =!" == "<MATab>" (
  17.         set /a dup_line += 1
  18.     ) else (
  19.         set dup_line=0
  20.         if !tag_num! gtr 2 (
  21.             if /i "!str:</tabID>=!" neq "!str!" (
  22.                 set "str=!str:</tabID>=!"
  23.                 set /a tag_num -= 1
  24.             )
  25.         )
  26.     )
  27.     if !dup_line! leq 1 echo,!str:~1!
  28.     for /f "tokens=1,2" %%a in ("!tag_num! !dup_line!") do (
  29.         EndLocal
  30.         set tag_num=%%a
  31.         set dup_line=%%b
  32.     )
  33. )) >%file%

  34. del %temp_file%
复制代码
发表于 2011-5-29 17:59:49 | 显示全部楼层
本帖最后由 batman 于 2011-5-29 18:33 编辑

第二问:

  1. Dim fso, vbstr, vbout
  2. Set fso = CreateObject("scripting.filesystemobject")
  3. vbstr = fso.OpenTextFile("a.txt", 1).ReadAll()
  4. Dim str, stra
  5. If UBound(Split(vbstr, "</tabID>")) < 3 Then stra = "</tabID>"
  6. For i = 0 To UBound(Split(vbstr, "</tabID>"))
  7.   If i = UBound(Split(vbstr, "</tabID>")) - 1 Then
  8.     vbout = vbout & Split(vbstr, "</tabID>")(i) & "</tabID>"
  9.     Else
  10.     vbout = vbout & Split(vbstr, "</tabID>")(i) & stra
  11.   End If
  12. Next
  13. fso.OpenTextFile("a.txt", 2, 1).Write vbout
  14. Set fso = Nothing
  15. MsgBox "ok"
复制代码
ps:昨天是老妈生日,所以没能及时回复。。。
 楼主| 发表于 2011-5-30 02:11:22 | 显示全部楼层
抱歉来晚了

bat似乎对utf8文本完全不起作用

我试过超级版主的vbs

但是只能在本地编码作用,vbs改成utf8编码就完全不能执行

请问该怎么办谢谢
发表于 2011-5-30 08:23:06 | 显示全部楼层
不能简单地改文件格式啊,要用转码工具转码
 楼主| 发表于 2011-5-30 14:16:11 | 显示全部楼层
所以批处理碰上编码是无解@@
发表于 2011-5-30 18:34:08 | 显示全部楼层
本帖最后由 tmplinshi 于 2011-5-31 08:32 编辑

代码中用到了编码转换工具 iconv。iconv 下载地址:
http://bathome.net/thread-10861-1-2.html
  1. @echo off

  2. rem 在这里设置要修改的文件
  3. set file="4.htm"

  4. set temp_file="%temp%\.tmp.%random%"
  5. set /a tag_num = 0, dup_line = 0

  6. rem 查找“</tabID>”的个数
  7. find /c /i "</tabID>" <%file% >%temp_file%
  8. set /p tag_num=<%temp_file%
  9. if %tag_num% gtr 2 set /a tag_num += 1

  10. iconv -f utf-8 -t gbk -c %file% | findstr /n .* >%temp_file%

  11. (for /f "usebackq delims=" %%a in (%temp_file%) do (
  12.     set str=%%a
  13.     SetLocal EnableDelayedExpansion
  14.     set str= !str:*:=!
  15.     if /i "!str: =!" == "<MATab>" (
  16.         set /a dup_line += 1
  17.     ) else (
  18.         set dup_line=0
  19.         if !tag_num! gtr 2 (
  20.             if /i "!str:</tabID>=!" neq "!str!" (
  21.                 set "str=!str:</tabID>=!"
  22.                 set /a tag_num -= 1
  23.             )
  24.         )
  25.     )
  26.     if !dup_line! leq 1 echo,!str:~1!
  27.     for /f "tokens=1,2" %%a in ("!tag_num! !dup_line!") do (
  28.         EndLocal
  29.         set tag_num=%%a
  30.         set dup_line=%%b
  31.     )
  32. )) >%file%

  33. iconv -f gbk -t utf-8 %file% >%temp_file%
  34. move %temp_file% %file%
复制代码
 楼主| 发表于 2011-5-31 08:00:57 | 显示全部楼层
不好意思

我再上传一次文本

给大哥们测试看看

我的文本一定要是utf8才能在软件上运行

一但不是utf8就不能使用

可是批处理无法对utf8作处理@@
发表于 2011-5-31 08:27:58 | 显示全部楼层
24# leo198444


测试了 23 楼的代码吗?
 楼主| 发表于 2011-6-1 04:48:04 | 显示全部楼层
24# leo198444


测试了 23 楼的代码吗?
tmplinshi 发表于 2011-5-31 08:27


你好,谢谢你

我已经试过了

但是毫无作用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 14:13 , Processed in 0.019828 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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