Board logo

标题: [文本处理] 【已解决】批处理:文本内的数据按出现次数多少排序 [打印本页]

作者: 思想之翼    时间: 2015-2-15 10:14     标题: 【已解决】批处理:文本内的数据按出现次数多少排序

本帖最后由 思想之翼 于 2015-2-15 12:53 编辑

D:/数据1/内有若干txt文本,每个文本内数据格式为:
765
371
352
386
827
940
612
欲将文本内的数据(0-9十个数据)按出现次数多少排序,出现次数相同的,则从小到大排列,未出现的数据(0-9十个数据)也是从小到大排列。
上例排序为:2367158049【数据依次出现次数是:3 3 3 3 2 2 2 1 1 1】
排序结果3678124590写入D:/数据2/,文本名称与原名称相同。
这样的批处理如何写?
作者: xxpinqz    时间: 2015-2-15 12:11

本帖最后由 xxpinqz 于 2015-2-16 09:38 编辑
  1. @echo off
  2. cd /d "d:\数据1\"
  3. for %%i in (*.txt) do (
  4.     setlocal enabledelayedexpansion
  5.     (for /f "delims=" %%a in (%%i) do (
  6.         for %%b in (1%%a) do set/a x=%%b/100%%10,y=%%b/10%%10,z=%%b%%10
  7.         set/a #!x!+=1,#!y!+=1,#!z!+=1
  8.     )
  9.     for /l %%a in (0,1,9) do (
  10.         set/a t=9-%%a
  11.         if defined #%%a (
  12.             set "str=000000!#%%a!$!t!"
  13.             set "$!str:~-8!=%%a"
  14.         ) else set "off=!off!%%a"
  15.     )
  16.     for /f "tokens=2 delims==" %%a in ('set $^|sort /r') do set "on=!on!%%a"
  17.     echo,!on!!off!
  18.     )>"d:\数据2\%%i"
  19.     endlocal
  20. )
复制代码

作者: 思想之翼    时间: 2015-2-16 03:28     标题: 显示

本帖最后由 思想之翼 于 2015-2-16 07:42 编辑

回复 2# xxpinqz
感谢帮助!经过测试,代码可能存在错误。显示:无效数字。数字常数只能是十进制<17>,十六进制<0x11>,或八进制<021>。
比如下列数据:
510
691
865
817
809
076
243
957
514
691
065
017
049
476
832
957
638
713
576
534
581
847
092
164
排序应该是:1567048932【出现次数依次为 9 9 9 9 7 7 7 7 5 3 】
而运用代码排序为:5167840392
恳望继续得到您的帮助。
作者: xxpinqz    时间: 2015-2-16 09:38

回复 3# 思想之翼


    已改




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