标题: [文本处理] 如何用批处理删除文本文档中重复的单词? [打印本页]
作者: 诠山 时间: 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
用定义的方法:
测试代码:- @echo off
- setlocal enabledelayedexpansion
- rem =======读取文件全部内容(注:没考虑特殊字符等)========
- for /f "delims=" %%i in (test.txt) do (
- set "str=" %/这里清空变量str%
- for %%j in (%%i) do ( %//以空格为分割符切割变量%
- rem ===========如果%%j没有定义过,就定义,并将该变量结果传给str========
- if not defined %%j set %%j=A && set str=!str! %%j)
- echo 结果为:!str!,结果保存在文件:res.txt中....
- echo !str!>res.txt
- )
-
- pause>nul
复制代码
作者: 随风 时间: 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 <nul)
- )
- echo.
- )
- 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内容是通过以下代码得到的- @echo off
- cd.>a.txt
- for /l %%a in (1 1 129) do set /p=%%a <nul>>a.txt
- echo.>>a.txt
- for /l %%a in (1 1 10) do set /p=%%a <nul>>a.txt
- echo.>>a.txt
- for /l %%a in (3 1 40) do set /p=%%a <nul>>a.txt
- echo.>>a.txt
- for /l %%a in (100 1 120) do set /p=%%a <nul>>a.txt
- echo.>>a.txt
复制代码
列出a.txt中,从未重复过的单词,每行10个.- @echo off
- for /f "delims=" %%a in (a.txt) do (
- for %%b in (%%a) do set /a _%%b+=1
- )
- setlocal EnableDelayedExpansion
- for /f "tokens=1,2 delims=_=" %%a in ('set _') do (
- if "%%b"=="1" (
- set /a num+=1
- set/p=%%a <NUL
- if !num! equ 10 set num=0&echo.
- ))
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |