标题: [文本处理] 【已解决】BAT:如何统计多个文本的数据范围值 [打印本页]
作者: 思想之翼 时间: 2014-9-17 04:10 标题: 【已解决】BAT:如何统计多个文本的数据范围值
本帖最后由 思想之翼 于 2014-9-17 23:02 编辑
d:/文本/文本1/001/lishi/内有若干文本 0-0000001.txt 0-0000002.txt 1-0000001.txt 2-0000001.txt 2-0000002.txt ......欲统计其记录的数据范围,示意如下:
若d:/文本/文本1/001/lishi/内有名称为0-0000001的txt文本,记录数据:
35 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
上述文本的第二列数据2,表示第一列数据35出现2次。第3-N列的数据忽略不计。 (下同)
现在统计0-0000001.txt数据,写成如下格式:
0-0=35-35=2-2
0-0表示0-0000001.txt文本名称的首位数值是0(下同)
35-35表示第1列数据(下同)
2-2表示第2列数据(下同)
若d:/文本/文本1/001/lishi/内除了0-0000001.txt外,还有名称为0-0000002的txt文本,记录数据:
35 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
41 285 115 29 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
现在统计0-0000001.txt 0-0000002.txt数据,写成如下格式:
0-0=35-35=2-8 (数据35出现的次数最小是2,最大是8。如果还有0-0000003.txt,数据35出现次数是3,则仍为2-8)
0-0=41-41=285-285
若d:/文本/文本1/001/lishi/内 还有名称为1-0000001的txt文本,记录数据:
5 28 22 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
现在统计0-0000001.txt 0-0000002.txt 1-0000001.txt数据,写成如下格式:
0-0=35-35=2-8
0-0=41-41=285-285
1-1=5-5=28-28
若d:/文本/文本1/001/lishi/内 还有名称为2-0000001的txt文本,记录数据:
0 562 22 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
现在统计0-0000001.txt 0-0000002.txt 1-0000001.txt 2-0000001.txt 数据,写成如下格式:
0-0=35-35=2-8
0-0=41-41=285-285
1-1=5-5=28-28
2-2=0-0=562-562
若d:/文本/文本1/001/lishi/内 还有名称为2-0000002的txt文本,记录数据:
0 195 22 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
现在统计0-0000001.txt 0-0000002.txt 1-0000001.txt 2-0000001.txt 2-0000002.txt 数据,写成如下格式:
0-0=35-35=2-8
0-0=41-41=285-285
1-1=5-5=28-28
2-2=0-0=195-562 (数据0出现的次数最小是195,最大是562。如果还有2-0000003.txt,数据0出现次数是223,则仍为195-562)
上述统计的最终结果,写入d:/文本/001.txt
作者: xxpinqz 时间: 2014-9-17 13:35
- @echo off
- cd /d "d:\文本\文本1\001\lishi\"
-
- set 最大文件前缀编号=2
-
- (for /l %%a in (0,1,%最大文件前缀编号%) do (
- setlocal enabledelayedexpansion
- for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
- if not defined #_%%b_Min (
- set/a #_%%b_Max=#_%%b_Min=%%c
- set "str=!str! %%b"
- ) else (
- if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
- )
- )
- for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
- endlocal
- ))>d:\文本\001.txt
复制代码
作者: 思想之翼 时间: 2014-9-17 17:34
本帖最后由 思想之翼 于 2014-9-17 23:02 编辑
回复 2# xxpinqz
感谢您的帮助!圆满解决问题。
只是在代码扩展运用时,想将210个类似的代码合而为一,出现了如下的新问题:
@echo off
cd /d "d:\文本\文本1\001\lishi\"
set 最大文件前缀编号=2
(for /l %%a in (0,1,%最大文件前缀编号%) do (
setlocal enabledelayedexpansion
for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
if not defined #_%%b_Min (
set/a #_%%b_Max=#_%%b_Min=%%c
set "str=!str! %%b"
) else (
if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
)
)
for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
endlocal
))>d:\文本\001.txt
@echo off
cd /d "d:\文本\文本1\002\lishi\"
set 最大文件前缀编号=2
(for /l %%a in (0,1,%最大文件前缀编号%) do (
setlocal enabledelayedexpansion
for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
if not defined #_%%b_Min (
set/a #_%%b_Max=#_%%b_Min=%%c
set "str=!str! %%b"
) else (
if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
)
)
for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
endlocal
))>d:\文本\002.txt
.......
@echo off
cd /d "d:\文本\文本1\210\lishi\"
set 最大文件前缀编号=2
(for /l %%a in (0,1,%最大文件前缀编号%) do (
setlocal enabledelayedexpansion
for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
if not defined #_%%b_Min (
set/a #_%%b_Max=#_%%b_Min=%%c
set "str=!str! %%b"
) else (
if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
)
)
for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
endlocal
))>d:\文本\210.txt
以下是合并的代码,运行时出错了。烦请帮助修改:- @echo off&setlocal enabledelayedexpansion
- for /l %%x in (1001,1,1210) do (
- set y=%%x
-
- cd /d "d:\文本\文本1\!y:~1!\lishi\"
-
- set 最大文件前缀编号=2
-
- (for /l %%a in (0,1,%最大文件前缀编号%) do (
-
- for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
- if not defined #_%%b_Min (
- set/a #_%%b_Max=#_%%b_Min=%%c
- set "str=!str! %%b"
- ) else (
- if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
- )
- )
- for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!
- endlocal
- ))>d:\文本\!y:~1!.txt
- )
复制代码
作者: xxpinqz 时间: 2014-9-18 12:49
回复 3# 思想之翼 - @echo off
-
- set 最大文件前缀编号=2
-
- for /l %%x in (1001,1,1002) do (
- set y=%%x
- for /l %%a in (0,1,%最大文件前缀编号%) do (
- setlocal enabledelayedexpansion
- cd /d "d:\文本\文本1\!y:~1!\lishi\"
- for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>nul') do (
- if not defined #_%%b_Min (
- set/a #_%%b_Max=#_%%b_Min=%%c
- set "str=!str! %%b"
- ) else (
- if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
- )
- )
- for %%i in (!str!) do echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!>>"d:\文本\!y:~1!.txt"
- endlocal
- )
- )
复制代码
作者: 思想之翼 时间: 2014-9-21 12:29
本帖最后由 思想之翼 于 2014-9-21 13:00 编辑
回复 2# xxpinqz
感谢您的帮助!
实际运用中,发现先前提问的叙述中存在一个漏洞,恳望继续得到您的帮助:
0-0000001.txt文本记录数据:
35 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
36 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
统计0-0000001.txt一个文本的数据,写成如下格式:
0-0=35-35=2-2
0-0=36-36=4-4
0-0000002.txt文本记录数据:
36 5 5 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
37 6 6 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
统计0-0000001.txt 0-0000002.txt多个文本的数据,写成如下格式:
0-0=35-35=0-2【漏洞:数据35在所有文本中没有全部出现,则最小值为0】
0-0=36-36=4-5
0-0=37-37=0-6【漏洞:数据37在所有文本中没有全部出现,则最小值为0】
统计1-0000001.txt 1-0000002.txt....多个文本的数据,同上;
统计2-0000001.txt 2-0000002.txt....多个文本的数据,同上。
作者: xxpinqz 时间: 2014-9-22 07:17
本帖最后由 xxpinqz 于 2014-9-22 07:24 编辑
回复 5# 思想之翼
按原来稍微改动下,没怎么测试,有个前提条件:每一个文件中不能有重复的数据,如:
35 2 0 0 0 0 0 0 0 .。。。。。
42 3 0 0 0 0 0 00 .。。。。。。。
35 88 00 0 0 0 0 .。。。。。。。
如上所示,35重复的,这样就不行,得重新写代码。- @echo off
-
- set 最大文件前缀编号=2
-
- for /l %%x in (1001,1,1210) do (
- set "y=%%x"
- for /l %%a in (0,1,%最大文件前缀编号%) do (
- setlocal enabledelayedexpansion
- cd /d "d:\文本\文本1\!y:~1!\lishi\"
- for /f "tokens=1-2" %%b in ('type %%a-???????.txt 2^>^&1') do (
- set "tmp=%%b"
- if /i "!tmp:~-4!"==".txt" (
- set /a n+=1
- ) else (
- set /a #%%b+=1
- if not defined #_%%b_Min (
- set/a #_%%b_Max=#_%%b_Min=%%c
- set "str=!str! %%b"
- ) else (
- if !#_%%b_Min! gtr %%c (set #_%%b_Min=%%c) else if !#_%%b_Max! lss %%c set "#_%%b_Max=%%c"
- )
- )
- )
- for %%i in (!str!) do (
- if !#%%i! lss !n! set "#_%%i_Min=0"
- echo,%%a-%%a=%%i-%%i=!#_%%i_Min!-!#_%%i_Max!>>"d:\文本\!y:~1!.txt"
- )
- endlocal
- )
- )
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |