找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22492|回复: 8

[文本处理] 批处理如何统计数字?

[复制链接]
发表于 2012-9-26 18:40:25 | 显示全部楼层 |阅读模式
假如有一文本a.txt,内有很多行3位数。如:
327
568
245
356
128
要求写一个批处理程序,分别读文本中的数据(为每行一个三位数),如果第一位是0(即百位),其下方不允许出现2和3(即第二行的百位);如第一位是1,其下方不允许出现3和4;如第一位是2,其下方不允许出现1和2;如第一位是3,其下方不允许出现8和5;如第一位是4,其下方不允许出现5和6;如第一位是5,其下方不允许出现2和6;如第一位是6,其下方不允许出现1和9;如第一位是7,其下方不允许出现0和6;如第一位是8,其下方不允许出现8和9,否则则输出该三位数的行数,保存在b.txt。
如果第一位都符合上述条件,则接着读第二位(即十位),如果第2位是0(即第二行的十位),其下方不允许出现2,3;如第2位是1,其下方不允许出现3,4;第2位是2,其下方不允许出现1,2;第2位是3,其下方不允许出现8,5;第2位是4,其下方不允许出现5,6;第2位是5,其下方不允许出现2,6;第2位是6,其下方不允许出现1,9;第2位是7,其下方不允许出现0,6;第2位是8,其下方不允许出现8,9,否则则输出该三位数的行数,保存在b.txt。
如果第一位和第二位都符合上述条件,则接着读第三位。如果第3位是0,其下方不允许出现2,3;如第3位是1,其下方不允许出现3,4;第3位是2,其下方不允许出现1,2;第3位是3,其下方不允许出现8,5;第3位是4,其下方不允许出现5,6;第3位是5期下方不允许出现2,6;第3位是6,其下方不允许出现1,9;第3位是7,其下方不允许出现0,6;第3位是8,其下方不允许出现8,9,否则则输出该三位数的行数,保存在b.txt。
以此类推,接着后面第三行,第四行。。。。。。。。。。
上述数据,第一行为327,的第一位为3,其下方不允许出现8,5,现在已经出现5了,要求把行数输出,即输出行数“2”,保存到b.txt,如果第一位就出现了不允许出现的内容,则不需要读取第二位和第三位,接着看第二行的第一位5,其下方不允许出现2,6,现在已经出现了,也要把行数“3”输出保存到b.txt,第三行为245的第一位2,其下方不允许出现为1,2,第四行的百位没有出现1和2,第二位4,其下方不允许出现5,6,5也出现了,所以也将其行数“4”输出保存到b.txt中。以此类推,,,,,,,,,,
发表于 2012-9-26 21:02:23 | 显示全部楼层
话说偶已写出来了。因为偶不是高手,所以就不发给您了。
 楼主| 发表于 2012-9-27 02:03:03 | 显示全部楼层
回复 1# ketop


    是不是高手无所谓,能写出来就行了,高手只是给您的一个尊称,希望您能接受,小弟在此拜过~!
 楼主| 发表于 2012-9-28 12:28:22 | 显示全部楼层
怎么没有人回答啊?
发表于 2012-9-28 15:41:50 | 显示全部楼层
本帖最后由 batman 于 2012-9-28 15:43 编辑

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (023 134 212 385 456 526 619 706 889) do set "str=%%a"&set /a _!str:~,1!=!str:~1,1!,.!str:~,1!=!str:~2,1!
  3. (for /f %%a in (a.txt) do (
  4.   set "str=%%a"&set /a n+=1
  5.   if defined var (
  6.     set "flag="
  7.     for %%b in (0 1 2) do (
  8.       set /a a=!var:~%%b,1!
  9.       for %%c in (!a!) do (
  10.          if "!str:~%%b,1!" equ "!_%%c!" set "flag=a"
  11.          if "!str:~%%b,1!" equ "!.%%c!" set "flag=a"
  12.       )
  13.     )
  14.   )
  15.   if defined flag echo !n!
  16.   set "var=!str!"
  17. ))>b.txt
  18. start b.txt
复制代码
发表于 2012-9-28 16:18:42 | 显示全部楼层
vbs练习中。。。
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Set File = FSO.OpenTextFile("a.txt",1)
  3. A = Array(2,3,1,8,5,2,1,0,8,100)
  4. B = Array(3,4,2,5,6,6,9,6,9,100)
  5. DO Until File.AtEndOfStream
  6.    n = n + 1
  7.    Two = File.ReadLine
  8.    For i=1 To 3
  9.       If One = "" then Exit For
  10.       A1 = A(Mid(One,i,1))
  11.       B1 = B(Mid(One,i,1))
  12.       If Cstr(A1) = Mid(Two,i,1) Or Cstr(B1) = Mid(Two,i,1) Then
  13.          Str = Str & n & vbCrLf
  14.          Exit For
  15.       End If
  16.    Next
  17.    One = Two
  18. LOOP
  19. FSO.CreateTextFile("b.txt",True).Write Str
复制代码

评分

参与人数 1技术 +1 收起 理由
ketop + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-9-28 22:45:13 | 显示全部楼层
回复 5# batman


    你太厉害了,真的非常感谢~!~!
 楼主| 发表于 2012-9-28 22:49:12 | 显示全部楼层
回复 6# apang


    楼上已经解决,不过还是谢谢你!
发表于 2012-9-30 11:07:58 | 显示全部楼层
膜拜。。。。。 直接看不懂了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 16:35 , Processed in 0.020041 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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