Я пытаюсь решить производственную проблему.Мы ежедневно получаем файл ошибок (пн-пт) из банка, который содержит записи об ошибках.Эти записи имеют длину 94 байта.Иногда в файле будут присутствовать некоторые коды ошибок, которые вызывают некоторые серьезные проблемы при обработке системой в государстве.
Меня попросили «отфильтровать» записи ошибок из файла, который отправляется вГосударственный.Для этого я создал однострочную команду FINDSTR (ниже), чтобы найти записи, содержащие код ошибки «R02» (без кавычек), в позициях 4–6 записей и удалить их.
FindStr /V "R02" INPUT_FILE > OUTPUT_FILTERED_FILE_%DATE%_%TIME%
Это сработало, как я и надеялся, и запрашивающие пользователи были счастливы, НО один из менеджеров обнаружил, что запись, непосредственно предшествующая записи, содержащей код ошибки, ТАКЖЕ ДОЛЖНА БЫТЬ УДАЛЕНА из файла, поскольку она связана с записью, содержащей код ошибки.Проблема в том, что эта предыдущая запись НЕ содержит код ошибки.В позициях 89-94 есть 6-значное число, которое может быть связано с записью ошибки, но я не хочу угадывать или слишком усложнять сценарий.
Как видно из данных примера (ниже), существует 5 записей ошибок (5, 7, 9, 11 и 27), содержащих код ошибки «R02». Моя команда FindStr работала для удаленияR02 записывает и создает выходной файл без каких-либо записей об ошибках (содержащих «R02»).
ЧТО МНЕ НУЖНО СЕЙЧАС, чтобы иметь возможность удалить «связанные записи», которые идут с записями R02 в примереданные ниже.Если все сделано правильно, следующие записи будут удалены из файла примера в одном процессе: 4, 5, 6, 7, 8, 9, 10, 11, 26 и 27.
Мне нужно удалить оба«Записи ошибок R02 И соответствующая запись над каждой из этих записей ошибок одновременно, и записать вывод в NEW файл , оставив исходный файл без изменений, как есть - потому что он хранится локально нашим отделом пользователей.
Ниже показано, как выглядит содержимое записи INPUT (коды ошибок выделены жирным шрифтом) с номером записи, предварительно добавленным для справочных целей.Извините, но я не могу предоставить полные 94-байтовые записи из-за проблем безопасности.Ниже показано, как должен выглядеть мой желаемый выходной файл.
Я не знаю, можно ли это сделать с FindStr, но я уверен, что PowerShell справится с этой задачей, НО я ничего не знаю о PowerShell.Сценарий будет выполняться на Windows Server.
Может кто-нибудь помочь мне с созданием сценария, который будет выполнять обработку для преобразования входного файла в нужный выходной файл?
Большое спасибо за помощь.
****** Пример данных ******
Входной файл
Nbr- - Содержимое записи - -
01 HEADER RECORD
02 CONTROL RECORD
03 5200SAN
04 62112200
05 799**R02**12
06 62112200
07 799**R02**12
08 62112200
09 799**R02**12
10 62112200
11 799**R02**12
12 82000000
13 5200SAN
14 62112200
15 798C0312
16 62112200
17 798C0312
18 62112200
19 798C0312
20 62112200
21 798C0312
22 62112200
23 798C0312
24 82000000
25 5200SAN
26 62112200
27 799**R02**12
28 TRAILER RECORD
Требуемый новый выходной файл
Nbr - - Содержимое записи - -
01 HEADER RECORD
02 CONTROL RECORD
03 5200SAN
# DELETED #
# DELETED #
# DELETED #
# DELETED #
# DELETED #
# DELETED #
# DELETED #
# DELETED #
12 82000000
13 5200SAN
14 62112200
15 798C0312
16 62112200
17 798C0312
18 62112200
19 798C0312
20 62112200
21 798C0312
22 62112200
23 798C0312
24 82000000
25 5200SAN
# DELETED #
# DELETED #
28 TRAILER RECORD