无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4238|回复: 10
打印 上一主题 下一主题

如何用批处理给一个文本文件内容统计并排序?

[复制链接]
跳转到指定楼层
1#
发表于 2011-9-25 23:12:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如(一个文本文件内容):
我              我 你      他 他 他 你              你 你 你 他 他  
他 他 他 我 我 你 我
他 你 你 你 我 我 他


希望结果显示为(输出到一个新的文本文件最好):
他 10
你 9
我 6
2#
发表于 2011-9-26 13:02:22 | 只看该作者
如果能确定每一个字 都有空格相隔就好办多了。信息放到 x.txt 中
看看下面的:

@echo off & SETLOCAL ENABLEDELAYEDEXPANSION
set t=0 & set w=0 & set n=0
for /f "delims=" %%c in (x.txt) do (
for %%d in (%%c) do (
   if %%d*==他* set /a t+=1
   if %%d*==我* set /a w+=1
   if %%d*==你* set /a n+=1
)
)
echo 他 %t%
echo 你 %n%
echo 我 %w%
回复

使用道具 举报

3#
发表于 2011-9-26 14:34:22 | 只看该作者
原帖由 dos时代菜鸟 于 2011-9-26 13:02 发表
如果能确定每一个字 都有空格相隔就好办多了。信息放到 x.txt 中
看看下面的:

@echo off & SETLOCAL ENABLEDELAYEDEXPANSION
set t=0 & set w=0 & set n=0
for /f "delims=" %%c in (x.txt) do (
for %%d in (%%c) do (
   if %%d*==他* set /a t+=1
   if %%d*==我* set /a w+=1
   if %%d*==你* set /a n+=1
)
)
echo 他 %t%
echo 你 %n%
echo 我 %w%


斗胆妄自精简一下:
@echo off
for /f delims^= %%c in (x.txt) do (
for %%d in (%%c) do (
   if %%d*==他* set /a t+=1
   if %%d*==我* set /a w+=1
   if %%d*==你* set /a n+=1
))
(echo.他 %t%&echo.你 %n%&echo.我 %w%)>目标文件.txt
目标文件.txt:
他 10
你 9
我 7

[ 本帖最后由 2011_sim 于 2011-9-26 14:39 编辑 ]
回复

使用道具 举报

4#
发表于 2011-9-29 09:00:42 | 只看该作者
原帖由 2011_sim 于 2011-9-26 14:34 发表


斗胆妄自精简一下:
@echo off
for /f delims^= %%c in (x.txt) do (
for %%d in (%%c) do (
   if %%d*==他* set /a t+=1
   if %%d*==我* set /a w+=1
   if %%d*==你* set /a n+=1
))
(echo.他 % ...


  来招秒杀一切
  1. (for /f "usebackq delims=" %%i in ("%~dp0文本.txt") do (for %%a in (%%i) do if not defined %%a (set/a %%a+=1) else set /a %%a+=1))&&call echo.%%我%% %%你%% %%他%%
复制代码
回复

使用道具 举报

5#
发表于 2011-9-29 09:08:01 | 只看该作者
再来个更精简的。。

  1. (for /f "usebackq delims=" %%i in ("%~dp0文本.txt") do (for %%a in (%%i) do if not defined %%a (set/a _%%a+=1) else set /a _%%a=+=1))&&set _
复制代码
回复

使用道具 举报

6#
发表于 2011-9-29 09:45:14 | 只看该作者
原帖由 x9tian 于 2011-9-29 09:08 发表
再来个更精简的。。

(for /f "usebackq delims=" %%i in ("%~dp0文本.txt") do (for %%a in (%%i) do if not defined %%a (set/a _%%a+=1) else set /a _%%a=+=1))&&set _


这段代码构思巧妙!!佩服!
另外: 发现一个bug或者是x9tian 兄笔误
else set /a _%%a=+=1第一个=会被当作赋值符=,当条件不成立时可能会造成找不到操作数的错误。
可能我理解有误,不当之处请指正。

[ 本帖最后由 2011_sim 于 2011-9-29 17:32 编辑 ]
回复

使用道具 举报

7#
 楼主| 发表于 2011-9-30 10:54:26 | 只看该作者
原帖由 x9tian 于 2011-9-29 09:08 发表
再来个更精简的。。

(for /f "usebackq delims=" %%i in ("%~dp0文本.txt") do (for %%a in (%%i) do if not defined %%a (set/a _%%a+=1) else set /a _%%a=+=1))&&set _



无比的感谢!!!

已经试用了,真的很强很强,还有点小要求,有没有办法输出到一个新的文本文本里???
回复

使用道具 举报

8#
发表于 2011-9-30 11:32:01 | 只看该作者
原帖由 2011xiao8xiao 于 2011-9-30 10:54 发表



无比的感谢!!!

已经试用了,真的很强很强,还有点小要求,有没有办法输出到一个新的文本文本里???

(for /f "usebackq delims=" %%i in ("%~dp01.txt") do (for %%a in (%%i) do if not defined %%a (set/a _%%a+=1) else set /a _%%a:+=1))&&(set _)>目标文件.txt

[ 本帖最后由 2011_sim 于 2011-9-30 12:09 编辑 ]
回复

使用道具 举报

9#
 楼主| 发表于 2011-9-30 13:35:45 | 只看该作者
原帖由 2011_sim 于 2011-9-30 11:32 发表

(for /f "usebackq delims=" %%i in ("%~dp01.txt") do (for %%a in (%%i) do if not defined %%a (set/a _%%a+=1) else set /a _%%a:+=1))&&(set _)>目标文件.txt


越来越接近理想了,还差一步就完工了 ^o^ 那就是希望能够排序,从最高次数排下来。

再次感谢伸出援手相助的人!!!谢谢你们了!
回复

使用道具 举报

10#
发表于 2011-10-6 13:06:55 | 只看该作者
原帖由 <i>2011xiao8xiao</i> 于 2011-9-30 13:35 发表 <a href="http://bbs.wuyou.net/redirect.php?goto=findpost&pid=2312428&ptid=199541" target="_blank"><img src="http://bbs.wuyou.net/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />

<br />

<br />
越来越接近理想了,还差一步就完工了 ^o^ 那就是希望能够排序,从最高次数排下来。<br />
<br />
再次感谢伸出援手相助的人!!!谢谢你们了!
<br />
弱弱的问下楼主,你不会是统记一本书里面出现了多少个汉字, 和它们使用的频率吧.

  我实在想不出这是做什么喔  ,0.0
回复

使用道具 举报

11#
发表于 2011-10-6 13:13:18 | 只看该作者
原帖由 <i>2011_sim</i> 于 2011-9-29 09:45 发表 <a href="http://bbs.wuyou.net/redirect.php?goto=findpost&pid=2311792&ptid=199541" target="_blank"><img src="http://bbs.wuyou.net/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />

<br />

<br />
这段代码构思巧妙!!佩服!<br />
另外: 发现一个bug或者是x9tian 兄笔误<br />
else set /a _%%a=+=1第一个=会被当作赋值符=,当条件不成立时可能会造成找不到操作数的错误。<br />
可能我理解有误,不当之处请指正。
<br />

在XPSP3 下是没事的,  不信你试下,   SET 命令是有句,不允许变量的值里面直截出现等于号, 但是变量名是可以存在等于号的,所以这里不存在问题的.  这也算个小技巧吧, 如果要直截取变量为"我,你,他时"  可以为下面的工作更好的处理.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-28 12:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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