【发布时间】:2020-12-08 01:03:47
【问题描述】:
我制作了一个读取 .csv 文件的批处理文件。然后它继续从特定列(在本例中为第 4 列)中获取值并找到最高值。该脚本可以很好地处理整数,但是一旦我尝试传入具有浮点数的 .csv 文件,该脚本只会读取第一个数字。即,1.546 = 1、0.896 = 0 等...
如何正常读取浮点数?在这种情况下,至少有 2 个精度点(尽管使用真实 .csv 文件的值可以达到 6 个精度点)
要注意的另一件事是,这会打印出 3 次“缺少运算符”。我认为这可能是由于间距,但不确定在哪里。
脚本如下:
@echo off
set cur=0
set max=0
for /f "usebackq tokens=1-4 delims=," %%a in ("sample.csv") do (call :func "%%d")
echo Max is %max%
goto :here
:func
set /a cur=%1
if %cur% gtr %max% (set /a max=%cur%)
goto :eof
:here
pause
这是 sample.csv,可以正常工作:
1,2,,3,3,5,,
5,6,,7,12.3,6,,
9,10,,11,11.4,7,,
13,14,,15,10.1,2,,
我添加了一些额外的逗号,只是为了测试代码。
【问题讨论】:
-
嗯,不,默认情况下,您不能使用批处理文件进行分数。我强烈推荐powershell,话虽如此,你不能仅仅为了测试而添加逗号。一个csv文件是有格式的,通常内容应该和header匹配,如果你随意添加,那是没有意义的。
-
Gerhard,我会研究一下 powershell,谢谢。话虽如此,我的另一个程序生成的真实 .csv 具有空列的点,这些点显示为“,”。我只是想看看 for 循环是否会跳过它或抛出一些错误。此外,它似乎没有将其算作一列,因为在上面的示例中,到第 4 列仍然到达 3、12.3、11.4 和 10.1
-
是的,这是可以理解的,因为并非所有字段都有值,但您的列将是相等的。
标签: csv batch-file floating-point