批处理文件:从.csv文件读取浮点值

乔·布罗391

我已经制作了一个读取.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,,

我添加了一些逗号,只是为了测试代码。

格哈德

如果您要进行实际计算,那么batch-file在使用分数时,我不建议这样做,但是为了简单地测试最大值,我们可以按.任意一方将字符串拆分但是,您仍然不能使用set /a将其设为实际的整数:

@echo off & setlocal enabledelayedexpansion
set num=0 & set frac=0 
for /f "usebackq tokens=1-4 delims=," %%a in ("sample.csv") do (
  for /f "tokens=1* delims=." %%i in ("%%~d") do (
      if not "%%j" == "" if %%i gtr !num! (
         set "num=%%i"
         set "max=%%~d"
  )
      if %%i geq !num! if %%~j gtr !frac! (
         set "frac=%%~j"
         set "max=%%~d"
    )
  )
)
echo Max is %max%
pause

根据您对~这里的评论,摘录自for /?

In addition, substitution of FOR variable references has been enhanced.
You can now use the following optional syntax:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string

The modifiers can be combined to get compound results:

    %~dpI       - expands %I to a drive letter and path only
    %~nxI       - expands %I to a file name and extension only
    %~fsI       - expands %I to a full path name with short names only
    %~dp$PATH:I - searches the directories listed in the PATH
                   environment variable for %I and expands to the
                   drive letter and path of the first one found.
    %~ftzaI     - expands %I to a DIR like output line

In the above examples %I and PATH can be replaced by other valid
values.  The %~ syntax is terminated by a valid FOR variable name.
Picking upper case variable names like %I makes it more readable and
avoids confusion with the modifiers, which are not case sensitive.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章