Board logo

标题: [文本处理] 批处理如何统计数字? [打印本页]

作者: ketop    时间: 2012-9-26 18:40     标题: 批处理如何统计数字?

假如有一文本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中。以此类推,,,,,,,,,,
作者: apang    时间: 2012-9-26 21:02

话说偶已写出来了。因为偶不是高手,所以就不发给您了。
作者: ketop    时间: 2012-9-27 02:03

回复 1# ketop


    是不是高手无所谓,能写出来就行了,高手只是给您的一个尊称,希望您能接受,小弟在此拜过~!
作者: ketop    时间: 2012-9-28 12:28

怎么没有人回答啊?
作者: batman    时间: 2012-9-28 15:41

本帖最后由 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
复制代码

作者: apang    时间: 2012-9-28 16:18

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
复制代码

作者: ketop    时间: 2012-9-28 22:45

回复 5# batman


    你太厉害了,真的非常感谢~!~!
作者: ketop    时间: 2012-9-28 22:49

回复 6# apang


    楼上已经解决,不过还是谢谢你!
作者: missll    时间: 2012-9-30 11:07

膜拜。。。。。 直接看不懂了。




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