gpt4 book ai didi

for-loop - DOS - 试图理解分隔符以找到最低行数的 inf 文件

转载 作者:行者123 更新时间:2023-12-04 18:19:38 25 4
gpt4 key购买 nike

我在我正在编写的 bat 文件中发现了一个错误,并且偶然找到了一个修复程序,但是我不明白为什么修复程序有效。这最终​​是我的问题,或者如果这个逻辑还有其他我没有发现的问题。

该脚本在 2 个或更多文件中进行行数计算,然后目标是找到具有最低行数的文件,然后稍后在脚本中的变量中使用该计数作为参数。

示例文件 1(9 行):

Wrote,0
Wrote,1
Wrote,2
Wrote,3
Wrote,4
Wrote,5
Wrote,6
Wrote,7
Wrote,8

示例文件 2(10 行):
Wrote,0
Wrote,1
Wrote,2
Wrote,3
Wrote,4
Wrote,5
Wrote,6
Wrote,7
Wrote,8
Wrote,9

我看到的主要区别是文件 2 中的第 9 行和第 10 行是两位数的行号

注意:我不是指每一行的实际值,而是指行号的计数值,因为我的代码不会尝试解析行,而只是获取行数。

在我创建的代码顶部附近,然后将每个文件的计数值附加到一个名为 ~numbers.txt 的临时文件中,以便在这里模拟该过程,假设我的起始代码是:
echo 9 > ~numbers.txt
echo 10 >> ~numbers.txt
type ~numbers.txt

所以现在我有一个包含两行“9”和“10”的文件,当然 9 小于 10,但它也比 10 小一位。

现在我尝试通过将第一行读入变量然后循环并评估当前值是否小于先前值来找到文件 ~numbers.txt 中包含的最小数字。
setlocal enabledelayedexpansion
set /p lowest=<~numbers.txt

FOR /F "delims=" %%G in (~numbers.txt) DO IF %%G LSS !lowest! SET lowest=%%G
echo lowest num = %lowest%

当我运行这段代码时,我得到了这个错误的输出:

lowest num = 10



我发现如果我删除 "delims="从 FOR 循环我会得到 9 的正确结果。

还有以及真正搞砸了我对问题的理解;如果我只将 ~numbers.txt 中的值更改为 10 和 100 并单独保留 FOR 循环行(保持 "delims=" ),那么我得到正确的值 10 作为我的答案???

这很糟糕,因为这意味着我的逻辑有缺陷,并且其他数字组合也会产生不同的结果。

谁能向我解释为什么会这样和/或举例说明如何获得正确的最低数字而不管值如何?

谢谢...

最佳答案

如果你没有看到某些东西,并不意味着它不存在。 (我在这里说的是空格)
试试这个:

> ~numbers.txt echo 9<press ENTER immediately>
>> ~numbers.txt echo 10<press ENTER immediately>

这将是真正的所见即所得,行尾没有空格, if 没有文本比较因为字符串不都是数字。
当然,正如您已经注意到的那样,使用默认分隔符(其中一个是空格)去除空格也可以正常工作。

考虑这种确定最低行数的方法:
set /a minlines=0x7FFFFFFF
for /f "tokens=2 delims=:" %%a in ('find /c /v "" *.txt') do set /a minlines="%%a-(minlines-%%a)*(minlines-%%a>>255)"
echo %minlines%

注意:没有 ifs,没有延迟扩展

关于for-loop - DOS - 试图理解分隔符以找到最低行数的 inf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10938759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com