删除 CSV 中的逗号而不添加额外的列

问题描述 投票:0回答:1

我有这个脚本旨在删除 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
windows csv batch-file cmd
1个回答
0
投票

对于每一行,将空格替换为唯一字符(此处为“#”)(因为逗号和空格都用作分隔符)。
然后将此行分解为标记(列)(不再有空格,因此仅以逗号分隔),从标记中删除所有逗号并重新组装该行,同时将特殊字符恢复为空格:

@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=,"
循环,但是您需要列数,并且所有行必须具有相同的数字。我没有收到问题的答案,所以我使用了不同的方法(不需要知道,行甚至可以有不同数量的列)

© www.soinside.com 2019 - 2024. All rights reserved.