@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q34875733.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
SET "line=%%a"&call :process
)
)>"%outfile%"
GOTO :EOF
:process
SET /a "col1=%line:~0,4%"
SET "col2=%line:~4,32%"
SET "col2=%col2: =%"
SET "col2=%col2: =%"
SET "col2=%col2: =%"
SET "col2=%col2: =%"
IF "%col2:~-1%"==" " SET "col2=%col2:~0,-1%"
FOR /f "tokens=1-5" %%i IN ("%line:~36%") DO ECHO %col1%,%col2%,%%i,%%j,%%k,%%l,%%m
GOTO :EOF
Вы должны были бы измените настройки sourcedir
и destdir
в соответствии с вашими обстоятельствами.
Я использовал файл с именем q34875733.txt
, содержащий ваши данные для моего тестирования.
Создает файл, определенный в% выходной_файл%
Предполагая, что ваш макет фиксированной колонки, как описано, и что нет никаких символов в данных, к которым партия показывает чувствительность, повторяя ваши 2 строки в файл с 90k + линий было время работы около 7 минут на моей машине.
Для каждой линии присвоить строку line
и процесса с помощью
- выбора первого 4 столбца в виде числа с
col1
- выбора следующих 32 столбцов
col2
- замены строк 16, 8,4 и 2 пробела на ничего не найдено
- удаляющий последний символ, если это пробел
- , токенизирующий часть строки после столбца с использованием разделителей по умолчанию и построение выходной строки.
Замена рутина
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q34875733.txt"
SET "outfile=%destdir%\outfile.txt"
SET "tab= "
(
FOR /f "usebackqtokens=1-7delims=%tab%" %%a IN ("%filename1%") DO (
REM detect missing column 3
IF "%%g" == "" (ECHO %%a,%%b,,%%c,%%d,%%e,%%f) ELSE (ECHO %%a,%%b,%%c,%%d,%%e,%%f,%%g)
)
)>"%outfile%"
GOTO :EOF
Посмотрев на свои исходные данные, он apper бы, что колонки выровнены с помощью вкладок и столбец 3 иногда отсутствует (413 denelan)
Следовательно - процедура замены (вам нужно будет переформатировать исходные данные 61 LEUKOCELL 2 в том же формате, который, как вы могли бы использовать для остальной части файла.
Обратите внимание, что символ между кавычками в настройке переменной tab
является таблицей Tab, а не строкой пробелов.
Итак, на этот раз разделите строку на 7 столбцов, используя вкладку (или последовательность вкладок) в качестве разделителей; назначьте %% a .. %% g и извергайте. Если столбец 3 отсутствует, %%g
будет назначаться (так как имеется короткий столбец), поэтому %%g
будет казаться ничего.Если эта ситуация обнаружена, введите пустое поле в качестве столбца 3 (следовательно, ,,
)
Я предположил, что все данные содержат либо 7 столбцов, либо 6 столбцов, где отсутствует столбец 3.
Должен ли это быть файл '.bat' Windows, или вы можете использовать что-то вроде Python или Perl? – Will
Вы можете попробовать [JREPL.bat] dbenham (http://www.dostips.com/forum/viewtopic.php?f=3&t=6044&sid=7c4cc72f296bb6c6400fc9ea1a3669ae), гибрид batch/jscript. Он должен работать на любой текущей системе Windows без дополнительных установок. – jeb
@В файле Windows '.bat', у кого есть ключ? Надеюсь, вы можете помочь мне, ребята. – Maruja