Пакетная команда для обрезки пробелов в CSV - PullRequest
1 голос
/ 30 марта 2012

Я стараюсь избегать PowerShell, если это возможно.

Ищите способ использовать пакетную команду Windows для чтения текстового CSV-файла (количество столбцов может отличаться) и обрезки пробелов.Начальные и конечные пробелы должны быть удалены, но остальные должны быть сохранены

заранее спасибо

1 Ответ

0 голосов
/ 20 июня 2012

Полагаю, вы хотите удалить пробелы - в конце и начале строки - до и после любого разделителя

Полагаю, ваш разделитель будет согласован в файлах, поэтому оставьте его внутри скрипта вместо параметра. Сценарий предполагает, что внутри значений нет символа разделителя (это может произойти со строками). Если вам нужно обрабатывать больше специальных символов (например, табуляции), вы должны добавить соответствующие блоки. ! замените% при использовании отложенное расширение . Мне нужно было сделать это, чтобы переменная хорошо разбиралась в подблоках.

Пояснение:
Для каждой строки проверьте для каждого случая.
Пока дело найдено, переберите его.

@echo off
setlocal enabledelayedexpansion
:: Remove spaces from csv
:: ARGS:
:: 1 : file name of the CSV file

set _SEP=;
dir /b %1  2>&1 >nul
if ERRORLEVEL 1 echo ERROR : File not found & goto :EOF

del %1.trimmed 2>nul

for /f "delims=%_SEP% tokens=*" %%L in (%1) do (
echo before: %%L
set _LINE=%%L

call :CHECK_BEFORE
call :CHECK_AFTER
call :CHECK_BEGIN
call :CHECK_END

echo !_LINE! >> %1.trimmed
)

echo END of TRIM
echo output is in %1.trimmed
goto :EOF


:TRIM_BEFORE_SEP
set _LINE=!_LINE: ;=;!
goto :EOF

:TRIM_AFTER_SEP
set _LINE=!_LINE:; =;!
goto :EOF

:TRIM_BEGIN
set _LINE=!_LINE:~1!
goto :EOF

:TRIM_END
set _LINE=!_LINE:~0,-1!
goto :EOF

:CHECK_BEFORE
echo !_LINE! | findstr /C:" ;"
if %ERRORLEVEL% == 0 call :TRIM_BEFORE_SEP & goto CHECK_BEFORE
echo End Step: Trim Before Sep
goto :EOF

:CHECK_AFTER
echo !_LINE! | findstr /C:"; "
if %ERRORLEVEL% == 0 call :TRIM_AFTER_SEP & goto CHECK_AFTER
echo End Step: Trim After Sep
goto :EOF

:CHECK_BEGIN
if "!_LINE:~0,1!" == " " call :TRIM_BEGIN & goto CHECK_BEGIN
echo End Step: Trim Begin
goto :EOF

:CHECK_END
if "!_LINE:~-1!" == " " call :TRIM_END & goto CHECK_END
echo End Step: Trim End
goto :EOF

НТН Возможно, я не очень хорош в объяснении, поэтому не стесняйтесь спрашивать подробности.

...