[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

假如有一文本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中。以此类推,,,,,,,,,,

膜拜。。。。。 直接看不懂了。
花开不问月,不语笑红尘.

TOP

回复 6# apang


    楼上已经解决,不过还是谢谢你!

TOP

回复 5# batman


    你太厉害了,真的非常感谢~!~!

TOP

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

评分人数

    • ketop: 乐于助人技术 + 1

TOP

本帖最后由 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
复制代码
***共同提高***

TOP

怎么没有人回答啊?

TOP

回复 1# ketop


    是不是高手无所谓,能写出来就行了,高手只是给您的一个尊称,希望您能接受,小弟在此拜过~!

TOP

话说偶已写出来了。因为偶不是高手,所以就不发给您了。

TOP

返回列表