0

Я написал этот код, чтобы удалить столбец из файла 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 

Я не понимаю, почему в выходном файле в первой строке ,, устранен и , добавил в конце. Также мне интересно, есть ли лучший способ сделать это. Спасибо!

ответ

1
@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, содержащий ваши данные для моего тестирования.

Производит и: \ newfile.txt

разделителей между маркерами являются ограничителем последовательностей, так ,, рассматриваются в качестве одного из сепаратора, следовательно, поля появляются движимым одно местом.

захватить каждую строку, заменить каждый , с , tokenise (вы не говорите явно, но вы, кажется, хотят, чтобы исключить второй столбец), поэтому %%q получает первый столбец и %%r оставшуюся часть строки после второго. Объедините их, вставьте запятую и затем отмените замену.

Если вы хотите исключить другой столбец, то необходимо указать другой элемент tokens и отрегулировать структуру строения.

+0

большое спасибо! – Bubu