Пакетная обработка: разбить значения в отдельной строке с указанием c разделитель трубы - PullRequest
2 голосов
/ 21 апреля 2020

Я пытаюсь создать отчет, который будет разбит на следующую строку для каждой строки. Мои данные:

I,have,a,report,to,split,|,into,next,row
my,second,line,should,also,|,split,like,before

тогда должно быть так:

I,have,a,report,to,split
into,next,row
my,second,line,should,also
split,like,before

Я пробовал скрипт:

@echo off
setLocal
for /f "tokens=1 delims=.|" %%a in (input.csv) do echo %%a
for /f "tokens=2 delims=.|" %%a in (input.csv) do echo %%a

но результат:

I,have,a,report,to,split
my,second,line,should,also
into,next,row
split,like,before

Кто-нибудь может мне помочь с этим? заранее спасибо…

1 Ответ

1 голос
/ 21 апреля 2020

Ваш пример результата неверен. Это вывод из вашего кода:

I,have,a,report,to,split,
my,second,line,should,also,
,into,next,row
,split,like,before

Обратите внимание на запятую в конце строки 1 и 2 и в начале строки 3 и 4

Этот метод работает:

@echo off
setlocal EnableDelayedExpansion

rem Define a variable with CR+LF ASCII chars:
for /F %%a in ('copy /Z "%~F0" NUL') do set CRLF=%%a^
%empty line 1/2%
%empty line 2/2%

rem Change each ",|," string by CR+LF characters
for /F "delims=" %%a in (input.csv) do (
   set "line=%%a"
   for %%N in ("!CRLF!") do echo !line:,^|,=%%~N!
)

Конечно, вы также можете сделать это "традиционным" :/ способом:

@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1,2 delims=|" %%a in (input.csv) do (
   set "left=%%a"
   set "right=%%b"
   echo !left:~0,-1!
   echo !right:~1!
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...