我正在尝试将CSV文件中的列加载到变量中。我的CSV文件包含空列,因此,,
可能会被以下内容忽略:
FOR /F "tokens=3 delims=," %%a in (csvfile.csv) do (
set date=%%a
echo %%a
)
因此,如果文件csvfile.csv
包含
fred,wilma,tony, john, greg, wilber, blake
chris,,steve,deon,bryan,mark,anthony
我想结果:
tony
steve
但我明白了:
tony
deon
如果我在空列中放置一个空格,这确实可以正常工作。
如何设置delims
以便它不会忽略空列?
答案 0 :(得分:3)
for
将连续分隔符视为一个。在大多数情况下,这很有帮助。有时它不是。
所以你必须以for
可以按照你的意图处理的方式编写你的行。
整体阅读文件的每一行,在开头和结尾添加引号,并将每个,
替换为","
,从而产生
"chris","","steve","deon","bryan","mark","anthony"
这可以很高兴地用另一个for
解析。 %%~b
中的波浪号删除了周围的引号。
@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=*" %%a in (csvfile.csv) do (
set line="%%a"
for /f "tokens=3 delims=," %%b in ("!line:,="^,"!") do echo %%~b
)
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q36372429.txt"
SET "oneline="
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
SET "line=%%a"
FOR /f "tokens=3delims=," %%h IN (" !line:,= , ! ") DO (
SET "column=%%h"
SET "oneline=!oneline! !column:~1,-1!"
ECHO(!column:~1,-1!
)
)
ECHO %oneline:~1%
GOTO :EOF
您需要更改sourcedir
和filename1
的设置以适合您的具体情况。
我使用了一个名为q36372429.txt
的文件,其中包含我的测试数据。
不幸的是,您还没有向我们展示真实的数据样本。我非常怀疑你使用date
作为目标变量。
date
是一个“神奇变量” - 由系统维护为当前日期。它可以被覆盖,但不建议这样做。
你想要从这个程序中得到什么并不是很清楚。也许您希望第3列中的条目全部在线上,或者您可能只希望列出第3列,或者您希望将输出传输到新文件。