数字序列中的最低可用数字

时间:2014-10-18 23:34:20

标签: loops batch-file numbers sequence

行。这个应该很容易......但它让我难过。使用.ini文件批量处理,使用节标题作为关键字段。问题是这些键未分类且缺少数字。简化问题。假设我有一个数组,就像这样,按此顺序:

1,12,6,2,0

因此,我想应用一个函数并返回“3”

我想如果下一个'可用'数字实际上更高,那么相同的功能应该能够容纳。例如:

3,1,0,2应该返回4.

编码方面并不那么烦恼 - 应该是For的一些组合,以及增加计数或其他东西。我只是想不出公式!

我得到的最近的是(伪):

A[1]=1
A[2]=12
A[3]=6  
(etc etc etc) 

set min=0
For count = 1 to {number of array components} 
If A[count]<count then (min=min+1)

但在某种情况下失败了。任何想法,还是我只是批量脑筋疲惫?

4 个答案:

答案 0 :(得分:1)

@ECHO Off
SETLOCAL
SET "missing="
FOR /L %%a IN (0,1,99) DO IF NOT DEFINED missing (
 find "[%%a]" q26445657.txt>NUL
 IF ERRORLEVEL 1 SET /a "missing=%%a"
)
ECHO I'd choose %missing% if I were you...

GOTO :EOF

我使用了一个名为q26445657.txt的文件,其中包含了我的测试数据。

[3]
data
[4]
data
[1]
data
[12]
data
[0]
some data

几乎不可避免地,您的简化尝试导致了更难以解决的问题。如你所说,这是一个.ini文件,所以我只能假设这种文件的标准格式。有代表性的数据样本将更有用。

答案 1 :(得分:0)

我猜你必须先对它们进行排序(0,1,3,6,12)然后再做一个for循环,在这个循环中你用前一个元素减去数组中的每个元素 e.g

A[1]=1
A[2]=12
A[3]=6  
A[4]=2
A[5]=0 

排序后

A[1]=0
A[2]=1
A[3]=2  
A[4]=6
A[5]=12

用条件== 1减去A [index] -A [index-1](这意味着两者都是连续的) 每当这个中断你将获得你的返回值,这将在第3次迭代中断,因为6-2不等于1.希望这是你想要的

答案 2 :(得分:0)

下面的批处理文件解决了您的简化问题,但它可以很容易地用于处理.ini文件(如果您发布.ini文件,我将修改代码)。代码中的复杂性是必需的,因为变量按字母顺序排序,因此必须在索引中插入左零。

@echo off
setlocal EnableDelayedExpansion

set "sequence=1,12,6,2,0"

set min=0
rem Process each number in sequence
for %%i in (%sequence%) do (
   set /A i=1000+%%i
   rem Create new array elements in ascending order up to current number
   if not defined A[!i!] (
      for /L %%j in (!min!,1,%%i) do (
         set /A j=1000+%%j
         set A[!j!]=%%j
      )
      set /A min=%%i+1
   )
   rem Delete current element
   set "A[!i!]="
)
rem Get the first undefined element
set "result="
for /F "tokens=2 delims==" %%i in ('set A[ 2^>NUL') do set "result=%%i" & goto continue
:continue
if not defined result set "result=%min%"
echo Result: %result%

答案 3 :(得分:0)

谢谢大家 - 所有真正有用的答案。是的,我现在看到,如果你尝试简化它只会让它变得更复杂!

选择答案是因为我最适合我的具体情况。只是将它们联系在一起,具体如下:

我确实有一个标准格式的ini文件,即

[0]

数据

[3]

数据

[1]

数据等...

我引用数组的原因是我有一个函数可以提取所有的节名(&#34; []&#34;中的那些)并将它们放入一个数组中。我认为这只会使问题变得复杂,并且Magoo的答案切入了追逐!全部再次感谢。