我有这个脚本旨在删除 CSV 中字符串中的“多余逗号”。
@echo off & setlocal EnableDelayedExpansion
echo Removing commas from FILE CSV file...
type nul > "H:\CONVERT_CSV.csv"
for /F "delims=" %%i in ('type "H:\FILE.csv"') do (
set row=%%i
set row=!row:"=!
echo.!row!>> "H:\CONVERT_CSV.csv"
)
但是我的脚本没有删除逗号,而是在该记录中添加了一个额外的字段。
我知道问题出在
set row!row"=!
行,但我不知道是什么。
请帮忙
示例
从此:
Column A,Column B
Now,All,2
Then,After
对此:
Column A,Column B
Now,All 2
Then,After
编辑:额外信息: csv 有:
123 ,the time, "Gone, For good", 2023
那么它应该变成:
123 ,the time, "Gone For good", 2023
对于每一行,将空格替换为唯一字符(此处为“#”)(因为逗号和空格都用作分隔符)。
然后将此行分解为标记(列)(不再有空格,因此仅以逗号分隔),从标记中删除所有逗号并重新组装该行,同时将特殊字符恢复为空格:
@echo off
setlocal enabledelayedexpansion
type file.csv
echo ---------
(for /f "delims=" %%a in (file.csv) do (
set "line=%%a"
set "line=!line: =#!"
set "newline="
for %%b in (!line!) do (
set "colum=%%b"
set "colum=!colum:#= !"
if not defined newline (set "newline=!colum:,=!") else (set "newline=!newline!,!colum:,=!")
)
echo !newline!
))>"CONVERT_CSV.csv"
type "CONVERT_CSV.csv"
输出:
Column A,Column B
Now,All 2
Then,After
123 ,the time, "Gone, For good", 2023
---------
Column A,Column B
Now,All 2
Then,After
123 ,the time, "Gone For good", 2023
如果您的数据包含示例中未显示的某些特殊字符,则可能需要进行一些调整。
更明显的方法是
for /f "tokens=1-x delims=,"
循环,但是您需要列数,并且所有行必须具有相同的数字。我没有收到问题的答案,所以我使用了不同的方法(不需要知道,行甚至可以有不同数量的列)