行。这个应该很容易......但它让我难过。使用.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)
但在某种情况下失败了。任何想法,还是我只是批量脑筋疲惫?
答案 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的答案切入了追逐!全部再次感谢。