批处理文件以删除csv中的列

布布

我写了这段代码,以便可以从csv文件中删除一列。

@echo off
setlocal enableextensions enabledelayedexpansion
type nul > tmp.txt
SET /A COUNT=0
for /F "tokens=*" %%A in (d.csv) do (
    set LINE="%%A"
    set /A COUNT+=1
    for /F "tokens=1,2,3,4,5,6,7,8,* delims=," %%a in (!LINE!) do (
        set row[0]=%%a
        set row[1]=%%b
        set row[2]=%%c
        set row[3]=%%d
        set row[4]=%%e
        set row[5]=%%f
        set row[6]=%%g
        set row[7]=%%h
)       

    echo !row[0]!,!row[2]!,!row[3]!,!row[4]!,!row[5]!,!row[6]! >>tmp.txt
        echo.
)
endlocal



Test file:
A1,B1,C1,D1,la la,,1
A2,B2,C2,D2, ,fef 3,
A3,B3,C3,D3,be be ,bo,bo 1
A4,B4,C4,D4,tu tu,tu 7,881

Output file:
A1,C1,D1,la la,1, 
A2,C2,D2, ,fef 3, 
A3,C3,D3,be be ,bo,bo 1 
A4,C4,D4,tu tu,tu 7,881 

我不明白为什么在输出文件的第一行中会删除,并,在末尾添加。我也想知道是否有更好的方法可以做到这一点。谢谢!

oo
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
(
 FOR /f "delims=" %%a IN (q29441490.txt) DO (
  SET "line=%%a"
  SET "line=!line:,= , !"
  FOR /f "tokens=1,2*delims=," %%p IN ("!line!") DO (
   SET "line=%%p,%%r"
   SET "line=!line: , =,!"
   ECHO(!line!
  )
 )
)>u:\newfile.txt

GOTO :EOF

我使用了一个名为q29441490.txt包含您的数据的文件进行测试。

产生u:\ newfile.txt

标记之间的分隔符是定界符序列,因此,,被视为一个分隔符,因此这些字段似乎移动了一位。

抓住每一行,,,记号代替每一行(您没有明确说,但您似乎想消除第二列),以便%%q获得第一列,并%%r获得第二行之后的其余部分。将它们连接起来,插入逗号,然后反转替换。

如果要消除另一列,tokens则应指定其他元素,并且需要调整行的重组。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章