Изменить символ в командном файле - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время у меня есть экспорт в CSV со следующим выводом

number;sentence;text;text;text;text;text;text;18.05.2012;time;text;text;number
number;sentence;text;text;text;text;text;text;18.05.2012;time;text;text;number
number;sentence;text;text;text;text;text;text;#;time;text;text;number
number;sentence;text;text;text;text;text;text;#;time;text;text;number

Обратите внимание, что иногда случается, что дата отсутствует, вместо этого вставляется "#".Символ # также присутствует в других частях файла CSV, однако это не должно повлиять.Что сейчас происходит

@echo off
setlocal enableextensions enabledelayedexpansion

(for /f "skip=4 tokens=1-9* delims=," %%f in (input.csv) do if not "%%f"=="" (
    set "line=%%f"
    set "line=!line:#"=!"
    echo(!line!
)) > output.csv

endlocal    

Есть ли какие-нибудь указатели, где я ошибаюсь?

1 Ответ

0 голосов
/ 22 ноября 2018

Полагаю, вы не совсем поняли, что такое "жетоны".Первый токен установлен на данную переменную (%%a), следующие токены назначены (в алфавитном порядке) следующим переменным (%%b, %%c, ...).Вам нужно изменить девятый токен (%%i), поэтому вам нужно получить токены с 1 по 9 и * для «остальных».Также ваш неправильный разделитель (ваш текстовый файл имеет ;, поэтому вам нужно delims=;)

@echo off
setlocal enableextensions enabledelayedexpansion

(for /f "skip=4 tokens=1-9* delims=;" %%a in (input.csv) do (
    if "%%i"=="#" (set "data=") else (set "data=%%i")
    echo(%%a;%%b;%%c;%%d;%%e;%%f;%%g;%%h;!data!;%%j
)) > output.csv
endlocal    

(Конечно, вы также можете начать с %%f, но тогда ваш девятый токен будет %%n - легче читать, когда вы начинаете с a)

Имейте в виду, последовательные разделители рассматриваются как единое целое.Так что если у вас есть пустые поля (...;text;;text;...), ваш токенизация становится дикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...