标题: [文本处理] 批处理如何统计数字? [打印本页]
作者: 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 编辑
- @echo off&setlocal enabledelayedexpansion
- 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!
- (for /f %%a in (a.txt) do (
- set "str=%%a"&set /a n+=1
- if defined var (
- set "flag="
- for %%b in (0 1 2) do (
- set /a a=!var:~%%b,1!
- for %%c in (!a!) do (
- if "!str:~%%b,1!" equ "!_%%c!" set "flag=a"
- if "!str:~%%b,1!" equ "!.%%c!" set "flag=a"
- )
- )
- )
- if defined flag echo !n!
- set "var=!str!"
- ))>b.txt
- start b.txt
复制代码
作者: apang 时间: 2012-9-28 16:18
vbs练习中。。。- Set FSO = CreateObject("Scripting.FileSystemObject")
- Set File = FSO.OpenTextFile("a.txt",1)
- A = Array(2,3,1,8,5,2,1,0,8,100)
- B = Array(3,4,2,5,6,6,9,6,9,100)
- DO Until File.AtEndOfStream
- n = n + 1
- Two = File.ReadLine
- For i=1 To 3
- If One = "" then Exit For
- A1 = A(Mid(One,i,1))
- B1 = B(Mid(One,i,1))
- If Cstr(A1) = Mid(Two,i,1) Or Cstr(B1) = Mid(Two,i,1) Then
- Str = Str & n & vbCrLf
- Exit For
- End If
- Next
- One = Two
- LOOP
- 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 |