|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] разбить текстовый файл на несколько по условию |
|
CMD/BAT - [решено] разбить текстовый файл на несколько по условию
|
Новый участник Сообщения: 16 |
Профиль | Отправить PM | Цитировать Прошу помочь
Имеется текстовый файл следующего типа # 1 Текст1 Ошибка1 текст Ошибка2 текст Ошибка3 текст # 2 Текст2 Ошибка1 текст Ошибка2 текст Ошибка4 текст # 3 Текст3 Ошибка2 текст Ошибка4 текст Ошибка5 текст необходимо разделить на несколько текстовых файлов по следующему условию: если в части текста которая начинается с символа # и до следующей # встречается фраза "Ошибка1" то всю эту часть текста скопировать в файл 1.txt и т.д. |
|
Отправлено: 10:37, 21-01-2019 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать
|
Отправлено: 09:35, 22-01-2019 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Принцип деления такой:
в 1.txt собрали по ошибке "У aaaaaaaaaaaaaa не указан вес (не заполнено поле Weight)" это встречалось в 1 и 2 в 2.txt собрали по ошибке "У aaaaaaaaaaaaaa не указан рост (не заполнено поле Height)" это встречалось в 1 и 3 в 3.txt по ошибке "Некорректно заполнено поле SL_KOEF ("Коэффициенты сложности aaaaaaa vvvvvvvv"): не указан КСЛП с IdSl='9112' и значением Z_Sl='1.12'" это встретилось только в 2 в 4.txt собрали по ошибке "Не заполнены поля KPG и(или) KSG : KPG= 0, KSG= 0" это встретилось только в 4 в 5.txt собрали по ошибке "Несоответствие номера модели КСГ (поле MODEL_ID) периоду оказания МП (MODEL_ID= 0)" это встретилось только в 4 |
Отправлено: 11:29, 22-01-2019 | #12 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Rey71:
Логичнее выводить в файл заголовок секции и только саму строку с ошибкой, а не всю секцию целиком... Но однако, тут слишком всё неоднозначно. Сколько (максимально) типов ошибок может вообще присутствовать в файле? |
|
------- Отправлено: 14:10, 22-01-2019 | #13 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Rey71,
не лучше ли это все было делать в excel, например, с отдельным столбцом ошибки с выходом на примечание или гиперссылку или список на разновидность, да впрочем там есть где разгуляться по части сортировки и вывода. Или какая-то программа так (в txt) выводит и ничего не поделать уже. Вы понимаете что это целая база уже, а не мелкий сбор пунктов в файле. |
Отправлено: 16:08, 22-01-2019 | #14 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Rey71, Не знаю, зачем это надо. ИМХО, хотелось бы знать конечную цель. Если для анализа, то надо как-то сформулировать, что анализируется.
Сложновато, но попробуйте
@Echo Off cls Set "FileIn=Z:\Box_In\Errors\исходный файл.TXT" Set "BoxOut=Z:\Box_In\Errors" Set /A is=10000 Set /A ie=10000 Set "@@s=" Set "@@i10001=" Set "@@N10001=" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d" Set "@Tdate=%@Tdate:~2%" FOR /F "usebackq delims=" %%s IN ("%FileIn%") DO ( Call Set "SS=%%s" Call :Section "%%ss" "%%SS:~0,1%%" ) Call :Out Pause Exit /B 0 :Section If %2=="#" ( Call :Out Set "@@s=%~1" Exit /B 0 ) Set /A is+=1 Set "@@i%is%=%~1" If "%@@N10001%"=="" ( Set /A ie+=1 Call Set "@@N%%ie%%=%~1" ) Exit /B 0 :Out If "%@@s%"=="" Exit /B 1 If "@@i10001"=="" Exit /B 2 Echo %@@s% rem Set "@@i" FOR /F "usebackq tokens=1* delims==" %%i IN (`Set "@@i"`) DO ( Call Set /A Log=0 FOR /F "usebackq tokens=1* delims==" %%k IN (`"2>nul Set "@@N""`) DO ( If /I "%%~j"=="%%~l" ( Call Set /A Log=1 ) ) Call :Errors %%Log%% "%%~j" ) FOR /F "usebackq tokens=1* delims==" %%i IN (`Set "@@i"`) DO ( FOR /F "usebackq tokens=1* delims==" %%k IN (`"2>nul Set "@@N""`) DO ( If /I "%%~j"=="%%~l" ( Set "NFile=%%k" Call :OutFile %%NFile:~3%% ) ) ) FOR /F "usebackq tokens=1 delims==" %%i IN (`Set "@@i"`) DO Set "%%i=" Set /A is=10000 Exit /B 0 :Errors If Not %1==0 Exit /B 1 Call Set /A ie+=1 Call Set "@@N%ie%=%~2" Exit /B 0 :OutFile Set "OutName=%1" Set "OutName=%OutName:~1%.txt" >>"%BoxOut%\%@Tdate%_%OutName%" ( Echo %@@s% FOR /F "usebackq tokens=1* delims==" %%a IN (`Set "@@i"`) DO Echo %%b ) Exit /B 0 |
------- Последний раз редактировалось megaloman, 23-01-2019 в 10:29. Причина: Добавил кавычку, которая на выполнение не влияла Отправлено: 17:54, 22-01-2019 | #15 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать megaloman, что будет, если во входном файле попадутся угловые скобки?
|
Отправлено: 00:02, 23-01-2019 | #16 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Busla,
Цитата Busla:
|
|
------- Последний раз редактировалось megaloman, 23-01-2019 в 00:36. Отправлено: 00:30, 23-01-2019 | #17 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Файл 156145
странные как для меня решения предлагаются, я как-то так представлял себе задачу: @echo off set "f0=file.txt" set "$_err1=Ошибка1" set "$_err2=Ошибка2" set "$_err3=Ошибка3" set "$_err4=Ошибка4" set "$_err5=Ошибка5" for /f "tokens=1,2* delims=[]=" %%a in ('set $_^|find /n /v ""') do call :# "%%a" "%%c" "%f0%" pause& exit :# <"%~3" (for /f "delims= eol=" %%a in ('find /v ""') do @call :ntf "%%a") <$ (for /f "tokens=1* delims=[]" %%a in ('more') do @( <nul set /p="%%b"|>nul find "%~2" && ( for /f "delims=" %%$ in ('find "[%%a]"') do @set "s=%%$"& call :v "%~1" ) ) )& del $ exit /b :ntf <nul set /p="%~1"|>nul find "#" && ( if not defined n set /a n=0 if defined n set /a n+=1 ) >>$ (<nul set /p="[%n%]%~1"& echo:) exit /b :v >>"%~1.txt" (<nul set /p="%s:*]=%"& echo:) exit /b |
Последний раз редактировалось alpap, 05-04-2019 в 22:57. Отправлено: 04:51, 23-01-2019 | #18 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Медицинское учреждение. Ежемесячно формируется отчет в фонд обязательного медицинского страхования.
Перед отправкой отчета программа ФОМС проверяет отчет на наличие ошибок и формирует текстовый файл. (прикладываю образец файла с первыми двумя пациентами и ошибками по ним) в файле первая строка начинается с символа # и содержит информацию о пациенте, проводимом лечении и т.д. следующие строки каждая содержит ошибку которую необходимо исправить и так до строки начинающейся со знака #. Необходимо разделить этот файл на несколько файлов которые будут группироваться по ошибкам чтобы раздать мед персоналу для исправления ошибок. причем необходимо учесть следующее: Строка с ошибкой может быть как одинаковой целиком, например "У новорожденного не указан вес (не заполнено поле Weight)" так и совпадающей только частью строки, например "Значения полей KPG и KSG не соответствуют справочнику KSG.DBF в отчетном периоде : KPG= 16, KSG=110" где значения "KPG= 16, KSG=110" могут меняться в разных строках ошибок. как вариант можно создать файл с образцами основных ошибок и группировать по ним а если встретятся ошибки не существующие в файле образца ошибок то их собрать в отдельный файл. |
Отправлено: 06:35, 23-01-2019 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Rey71:
Цитата Rey71:
Оптимальный вариант, как я вижу — собирать виды ошибок сразу в виде регулярных выражений, для WSH или PoSH. |
||
Отправлено: 08:10, 23-01-2019 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Создать несколько файлов из одного по условию | Rey71 | Скриптовые языки администрирования Windows | 9 | 28-04-2018 08:13 | |
CMD/BAT - [решено] разбить файл на много файлов по шаблону и каждый файл положить в папку | Mezolick | Скриптовые языки администрирования Windows | 3 | 03-02-2017 08:38 | |
CMD/BAT - [решено] Как построчно разбить текстовый файл на текстовые файлы содержащие одну строку | binwatch@vk | Скриптовые языки администрирования Windows | 3 | 09-09-2012 19:59 | |
CMD/BAT - Разбить текстовый файл на части определенного размера. | kamcom88 | Скриптовые языки администрирования Windows | 0 | 22-03-2012 12:23 | |
CMD/BAT - Как разбить текстовый файл на куски определенного размера? | helik | Скриптовые языки администрирования Windows | 7 | 16-11-2011 06:35 |
|