rojo 为相对较小的数据集提供了一个很好的解决方案。
MC ND 为大型数据集展示了一个很好的纯批处理解决方案,但它可能会变得很慢。
大型数据集的快速解决方案需要使用纯批处理以外的其他方法。一种选择是我的JREPL.BAT utility,这是一种混合 JScript/批处理脚本,可以对文本执行正则表达式替换。
假设 JREPL.BAT 在您的 PATH 中的某个位置,并且您的 csv 是“test.csv”,那么以下将打印出每个数字,每行一个:
jrepl "," "\n" /x /f "test.csv"
由于 JREPL 是一个批处理脚本,如果您想在另一个批处理脚本中使用它,则必须使用 CALL JREPL。
下面显示了如何将数字存储在变量“数组”中,使用 FINDSTR 建立数组索引。请注意,我不需要call jrepl,因为在 FOR IN('') 子句中使用了 jrepl:
@echo off
setlocal enableDelayedExpansion
:: Store the numbers in an array
for /f "tokens=1,2 delims=:" %%A in (
'jrepl "," "\n" /x /f "test.csv" ^| findstr /n "^"'
) do (
set "n[%%A]=%%B"
set "n.count=%%A"
)
:: Display the numbers
for /l %%N in (1 1 %n.count%) do echo !n[%%N]!
或者您可以使用 JREPL 解析数字并建立索引值。这需要更多的代码,但效率更高:
@echo off
setlocal enableDelayedExpansion
:: Store the numbers in an array
for /f "tokens=1,2 delims=:" %%A in (
'jrepl "\d+" "(n+=1)+':'+$0" /jmatch /jbeg "var n=0" /f "test.csv"'
) do (
set "n[%%A]=%%B"
set "n.count=%%A"
)
:: Display the numbers
for /l %%N in (1 1 %n.count%) do echo !n[%%N]!