Board logo

标题: [文本处理] 如何用批处理删除文本文档中重复的单词? [打印本页]

作者: 诠山    时间: 2007-10-28 14:34     标题: 如何用批处理删除文本文档中重复的单词?

举例一个文档:
a b c d a c d  b  ab cd ab da da a d c db db  abc caa dba    abc abc   caa dba abc a b c ab cd    a    ad   a   abc a b caa abcd abcd   abcd
把这个保存为文本文档,请问如何用批处理删除重复的单词?

[ 本帖最后由 诠山 于 2007-10-28 14:37 编辑 ]
作者: youxi01    时间: 2007-10-28 15:18

用定义的方法:
测试代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem =======读取文件全部内容(注:没考虑特殊字符等)========
  4. for /f "delims=" %%i in (test.txt) do (
  5.      set "str="       %/这里清空变量str%
  6.      for %%j in (%%i) do ( %//以空格为分割符切割变量%
  7.          rem ===========如果%%j没有定义过,就定义,并将该变量结果传给str========
  8.          if not defined %%j set %%j=A && set str=!str! %%j)
  9.      echo 结果为:!str!,结果保存在文件:res.txt中....
  10.      echo !str!>res.txt
  11. )
  12.          
  13. pause>nul
复制代码

作者: 随风    时间: 2007-10-28 19:04

  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3. for %%i in (%%a) do (
  4. if not defined %%i (set %%i=a&set /p=%%i <nul)
  5. )
  6. echo.
  7. )
  8. pause
复制代码

[ 本帖最后由 随风 于 2007-10-29 00:14 编辑 ]
作者: youxi01    时间: 2007-10-29 02:27

原帖由 随风 于 2007-10-28 19:04 发表
@echo off
for /f "delims=" %%a in (a.txt) do (
for %%i in (%%a) do (
if not defined %%i (set %%i=a&set /p=%%i  

不错,用set /p的方式省了不少代码?哈哈...
作者: somebody    时间: 2007-10-29 02:43

两个人的回复都是一样的```
作者: namejm    时间: 2007-10-29 02:47

如果文件不大,用 if defined 来判断倒是很省事,如果是大文件的话,则可以考虑用 sort 生成临时文件来解决。
作者: 随风    时间: 2007-10-29 03:08

能再说明白点么?
sort  好像是排序用的,和排除重复单词有什么关系?
想不出!!!!
可以给出代码么?
或者给个思路也行.

[ 本帖最后由 随风 于 2007-10-31 18:46 编辑 ]
作者: youxi01    时间: 2007-10-29 07:49

namejm的想法难道是,先给它们排序,然后找出上下行一样的就删除?
作者: somebody    时间: 2007-10-29 14:10

这都听不懂...汗...
以前在CN-DOS 混过就知道有人早发表那样的贴子...
看看你们一个两个都是什么时候回的贴子,namejm 昨晚潜水被我知道啊```
普通人就在等namejm,哈哈,傻....

让我来给问题加点难度....
删除重复单词(若是出现两个一样的,那么两个都要删掉,绝不保留任何一个)
例如:
some
body11111111111111111111
some
any   554454s4df
boss444444444444444444654
删除掉some, 有多少个,删多少个,不留一个。

Tips: 可要考虑复杂点...每行超过127字节该怎么处理
     每一行中的字符串存在空格现象哦,比如 any   554454s4df
慢慢想吖..
作者: 随风    时间: 2007-10-29 20:04


不太明白你强调每行127字节是什么意识?
你是说for不能处理127字节的行吗? 我测试不出来.


我的a.txt内容是通过以下代码得到的
  1. @echo off
  2. cd.>a.txt
  3. for /l %%a in (1 1 129) do set /p=%%a <nul>>a.txt
  4. echo.>>a.txt
  5. for /l %%a in (1 1 10) do set /p=%%a <nul>>a.txt
  6. echo.>>a.txt
  7. for /l %%a in (3 1 40) do set /p=%%a <nul>>a.txt
  8. echo.>>a.txt
  9. for /l %%a in (100 1 120) do set /p=%%a <nul>>a.txt
  10. echo.>>a.txt
复制代码
列出a.txt中,从未重复过的单词,每行10个.
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.   for %%b in (%%a) do set /a _%%b+=1
  4. )
  5. setlocal EnableDelayedExpansion
  6. for /f "tokens=1,2 delims=_=" %%a in ('set _') do (
  7.   if "%%b"=="1" (
  8.   set /a num+=1
  9.   set/p=%%a <NUL
  10.   if !num! equ 10 set num=0&echo.
  11.   ))
  12. pause
复制代码

[ 本帖最后由 随风 于 2007-10-29 22:15 编辑 ]
作者: 诠山    时间: 2007-11-4 00:38

楼主的我试过,但“cd”呢,已经被删没了,这样对于我的重要文档来说太危险了,请改进,谢谢!
作者: 诠山    时间: 2007-11-4 00:44     标题: 回复 11# 的帖子

二楼的也同样,下边的就不用说了,唉!高手难求啊
作者: 随风    时间: 2007-11-4 10:52

但“cd”呢,已经被删没了
是什么意识???
你是否没把问题描述清楚.




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2