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

[文本处理] [已解决]批处理如何统计出文本中出现次数最多的一个字符?

本帖最后由 wsbdwpshh 于 2015-10-26 11:39 编辑

如何查出一个文本中 出现 最多的一个字?前提是 不知道这个字是 啥字!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 pcl_test 于 2016-8-8 21:02 编辑
  1. //&cls&cscript -nologo -e:jscript "%~f0"<"文本.txt"&pause&exit
  2. var arr={}, max=0;arr['list']=[];
  3. var str=WSH.StdIn.ReadAll().replace(/[ \s]/g, '') //清除空白符
  4. for (var i=0; i<str.length; i++){
  5.     if(!arr[str.charAt(i)]){
  6.         arr['list'].push(str.charAt(i));
  7.         arr[str.charAt(i)]=1
  8.     }else arr[str.charAt(i)]++;
  9. }
  10. arr['list'].sort(function(a, b){return arr[b]-arr[a]});
  11. for(var i=0; i<arr['list'].length; i++){
  12.     if(arr[arr['list'][i]]<max)break;
  13.     WSH.echo(arr['list'][i]+':'+arr[arr['list'][i]]);
  14.     max=arr[arr['list'][i]];
  15. }
复制代码
1

评分人数

TOP

本帖最后由 WHY 于 2015-10-21 14:14 编辑
  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" < a.txt & pause & exit
  3. @end
  4. var s = WScript.StdIn.ReadAll().replace(/[\r\n]/g, '');
  5. s = s.match(/./g).sort().join('');
  6. var re = /(.)(\1)*/g, n = 0, map = {}, ar;
  7. while(ar = re.exec(s)){
  8.     if (ar[0].length >= n){
  9.         n = ar[0].length;
  10.         map[n]=map[n]?ar[1]+','+map[n]:ar[1];
  11.     }
  12. }
  13. WScript.Echo('最多: ' + map[n] + '\n个数: ' + n)
复制代码
1

评分人数

    • CrLf: 算法nice技术 + 1

TOP

借 3 楼代码一用
  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" < %0 & pause & exit
  3. @end
  4. var s = WScript.StdIn.ReadAll();
  5. s = s.match(/[^\r\n]/g).sort().join('');
  6. var re = /(.)(\1)*/g, n = 0, ar = [];
  7. s.replace(re,function($0,$1){
  8. n++;
  9. ar.length = ar.length > $0.length ? ar.length : $0.length;
  10. ar[$0.length-1] ? ar[$0.length-1].push($1) : ar[$0.length-1]=[$1];
  11. })
  12. WScript.Echo('最多: ' + ar.pop().join('\r\n') + '\n个数: ' + n);
复制代码

TOP

本帖最后由 wankoilz 于 2015-10-22 14:02 编辑

练习awk!
以下代码找出目标文本出现次数前20位的字符:
  1. #&cls&@gawk -f %0 a.txt>con&pause>nul&exit
  2. {
  3.     for(i=1;i<=length($0);i++){
  4.         arr[substr($0,i,1)]++
  5.     }
  6. }
  7. END{
  8.     for (x in arr){
  9. tmp="0000000000"arr[x]
  10.         tmp=substr(tmp,length(arr[x])+1,10)
  11. arr[x]=tmp" "x
  12.     }
  13. len=asort(arr,ta)
  14. for(i=len-19;i<=len;i++){
  15.     printf "%d %s\n",substr(ta[i],1,10),substr(ta[i],11,2)
  16. }
  17. }
复制代码
gawk 4.1.0 下载地址:http://www.bathome.net/viewthread.php?tid=21366&highlight=gawk

TOP

哈哈,python Counter 简直神器

http://www.zlovezl.cn/articles/collections-in-python/
  1. # -*- coding: utf-8 -*-
  2. """
  3. 下面这个例子就是使用Counter模块统计一段句子里面所有字符出现次数
  4. """
  5. from collections import Counter
  6. s = '''A Counter is a dict subclass for counting hashable objects. It is an unordered collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts. The Counter class is similar to bags or multisets in other languages.'''.lower()
  7. c = Counter(s)
  8. # 获取出现频率最高的5个字符
  9. print c.most_common(5)
  10. # Result:
  11. [(' ', 54), ('e', 32), ('s', 25), ('a', 24), ('t', 24)]
复制代码

TOP

本帖最后由 CrLf 于 2015-10-21 20:49 编辑

回复 6# 依山居


powershell:
  1. $s = 'A Counter is a dict subclass for counting hashable objects. It is an unordered collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts. The Counter class is similar to bags or multisets in other languages.'
  2. [char[]]$s | group-object | sort-object -desc count|select-object -first 5
复制代码
极限压缩后的代码长度和你差不多:
  1. ([char[]]$s|group|sort *)[-1..-5]
复制代码

TOP

吐槽,能不设置成作者可见吗

TOP

回复 7# CrLf


    这帖子被设置作者可见了,你说啥我都看不到。

TOP

回复 9# 依山居


    done

TOP

回复 10# CrLf


    你开了好多技能树。。

TOP

回复 11# 依山居


    所以把技能点用光了

TOP

第三方http://www.bathome.net/s/tool/index.html?key=gawk
  1. #*&cls&@gawk -f "%~f0" "文本.txt">con&pause&exit
  2. {
  3.     gsub(/[[:space:]]/,"");
  4.     for(i=1;i<=length($0);i++)a[substr($0,i,1)]++;
  5. }
  6. END{
  7.     for(b in a){
  8.         if(c[a[b]]){
  9.             c[a[b]]=c[a[b]]" "b;
  10.         }else{
  11.             c[a[b]]=""b;
  12.             d[a[b]]=a[b];
  13.         }
  14.     }
  15.     for(i=asort(d);i>0;i--)print d[i]":"c[d[i]];
  16. }
复制代码

TOP

返回列表