Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] разбить текстовый файл на несколько по условию (http://forum.oszone.net/showthread.php?t=338836)

Rey71 21-01-2019 10:37 2853516

разбить текстовый файл на несколько по условию
 
Прошу помочь

Имеется текстовый файл следующего типа
# 1 Текст1
Ошибка1 текст
Ошибка2 текст
Ошибка3 текст
# 2 Текст2
Ошибка1 текст
Ошибка2 текст
Ошибка4 текст
# 3 Текст3
Ошибка2 текст
Ошибка4 текст
Ошибка5 текст
необходимо разделить на несколько текстовых файлов по следующему условию:
если в части текста которая начинается с символа # и до следующей # встречается фраза "Ошибка1" то всю эту часть текста скопировать в файл 1.txt и т.д.

megaloman 21-01-2019 11:58 2853536

Rey71, лучше бы Вы дали образец реального файла, так как абстракция Ошибка1 не гарантирует адекватное решение. Как минимум, хотелось бы видеть реальные представления Ошибка1 Ошибка2. Попутный вопросы:
1. Сколько ориентировочно строк в файле?
2. Если в текстовом файле Ошибка1 и т д встречается многократно, копировать в выходной файл каждую строку или только первую?
3. Сообщение Ошибка1 и т д содержит пробелы?

Rey71 21-01-2019 13:02 2853553

файл содержит персональные данные - не есть хорошо их показывать
1. строк примерно 2000
2. если ошибка встречается многократно то копировать в выходной файл каждую строку.
3. Сообщение Ошибка1 содержит пробелы.

на выходе хотелось бы получить

1.txt (Ошибка1)
# 1 Текст1
Ошибка1 текст
Ошибка2 текст
Ошибка3 текст
# 2 Текст2
Ошибка1 текст
Ошибка2 текст
Ошибка4 текст

2.txt (ошибка2)
# 1 Текст1
Ошибка1 текст
Ошибка2 текст
Ошибка3 текст
# 2 Текст2
Ошибка1 текст
Ошибка2 текст
Ошибка4 текст
# 3 Текст3
Ошибка2 текст
Ошибка4 текст
Ошибка5 текст

3.txt (ошибка3)
# 1 Текст1
Ошибка1 текст
Ошибка2 текст
Ошибка3 текст

и т.д.

yurfed 21-01-2019 13:24 2853558

Цитата:

Цитата Rey71
файл содержит персональные данные »

У вас их никто и не спрашивает. Да и не интересно это никому. Просто замените на что-нибудь абстрактное.
Нужен сам принцип построения вашего документа.
Цитата:

Цитата Rey71
2. если ошибка встречается многократно »

Многократно это больше чем 1+?

megaloman 21-01-2019 14:00 2853565

Цитата:

Цитата Rey71
3. Сообщение Ошибка1 содержит пробелы. »

Где кончается Ошибка1 и начинается текст? Приведите примеры строк.

Rey71 21-01-2019 14:08 2853568

Пример исходного файла

# 1 ВС '111 111111', , д/р 11.11.1111, муж, 11111111, , док. s15113652827
У aaaaaaaaaaaaaa не указан sss (не заполнено поле Weight)
У aaaaaaaaaaaaaa не указан qqqq (не заполнено поле Height)
# 2 ВС '2222 22222', , д/р 22.22.2222, муж, 22222222,, док. s03560575449
Некорректно заполнено поле IT_SL ("Итоговый коэффициент сложности ggggggg gggggggg"): It_Sl='1.18', д.б. '1.12'
У aaaaaaaaaaaaaa не указан sss (не заполнено поле Weight)

megaloman 21-01-2019 14:15 2853572

Rey71, Ошибка1 это У aaaaaaaaaaaaaa не указан sss
А текст в скобках?

YuS_2 21-01-2019 15:35 2853583

Цитата:

Цитата Rey71
У aaaaaaaaaaaaaa не указан sss (не заполнено поле Weight)
У aaaaaaaaaaaaaa не указан qqqq (не заполнено поле Height) »

Ничего не понятно...
Как будет строка идентифицироваться, чтобы было однозначное соответствие определенному выходному файлу?
Т.е., например, вот тут есть соответствие:
Код:

Ошибка1 -> 1.txt
Ошибка2 -> 2.txt
...
Ошибка4 -> 4.txt

а вот тут:
Нет соответствия
Цитата:

Цитата Rey71
1.txt (Ошибка1)
# 1 Текст1
Ошибка1 текст
Ошибка2 текст
Ошибка3 текст
# 2 Текст2
Ошибка1 текст
Ошибка2 текст
Ошибка4 текст
2.txt (ошибка2)
# 1 Текст1
Ошибка1 текст
Ошибка2 текст
Ошибка3 текст
# 2 Текст2
Ошибка1 текст
Ошибка2 текст
Ошибка4 текст
# 3 Текст3
Ошибка2 текст
Ошибка4 текст
Ошибка5 текст
3.txt (ошибка3)
# 1 Текст1
Ошибка1 текст
Ошибка2 текст
Ошибка3 текст »


и вот здесь:
его тоже нет
Цитата:

Цитата Rey71
# 1 ВС '111 111111', , д/р 11.11.1111, муж, 11111111, , док. s15113652827
У aaaaaaaaaaaaaa не указан sss (не заполнено поле Weight)
У aaaaaaaaaaaaaa не указан qqqq (не заполнено поле Height)
# 2 ВС '2222 22222', , д/р 22.22.2222, муж, 22222222,, док. s03560575449
Некорректно заполнено поле IT_SL ("Итоговый коэффициент сложности ggggggg gggggggg"): It_Sl='1.18', д.б. '1.12'
У aaaaaaaaaaaaaa не указан sss (не заполнено поле Weight) »



Как отбирать строки, чтобы они попали в тот файл, в который требуется?

Iska 21-01-2019 19:15 2853621

Rey71, возьмите Ваш исходный файл. Произвольно обфусцируйте в нём персональные данные. Сделайте из него «ручками» потребные текстовые файлы с потребными именами. Упакуйте всё это в архив, каковой приложите к сообщению.

Rey71 22-01-2019 06:13 2853697

Вложений: 1
Прошу прощения, не смог правильно объяснить задачу.
Прикладываю в архиве образец исходного файла и выходных файлов.
имена выходных файлов значения не имеют (можно просто цифрами).

Iska 22-01-2019 09:35 2853709

  • в первом выходном файле — 1 и 2;
  • во втором — 1 и 3;
  • в третьем — 2;
  • в четвёртом — 4;
  • в пятом — опять 4.
Принцип разделения не понятен (и не соответствует описанию из сообщения #3).

Rey71 22-01-2019 11:29 2853730

Принцип деления такой:

в 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

YuS_2 22-01-2019 14:10 2853761

Цитата:

Цитата Rey71
Принцип деления такой: »

И как Вы будете отличать файл 4.txt от 5.txt? По какому принципу?
Логичнее выводить в файл заголовок секции и только саму строку с ошибкой, а не всю секцию целиком...

Но однако, тут слишком всё неоднозначно. Сколько (максимально) типов ошибок может вообще присутствовать в файле?

alpap 22-01-2019 16:08 2853788

Rey71,
не лучше ли это все было делать в excel, например, с отдельным столбцом ошибки с выходом на примечание или гиперссылку или список на разновидность, да впрочем там есть где разгуляться по части сортировки и вывода. Или какая-то программа так (в txt) выводит и ничего не поделать уже. Вы понимаете что это целая база уже, а не мелкий сбор пунктов в файле.

megaloman 22-01-2019 17:54 2853801

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

Имена выходных файлов сделал в формате ГГММДДччммсс_nnnn.txt

Busla 23-01-2019 00:02 2853892

megaloman, что будет, если во входном файле попадутся угловые скобки?

megaloman 23-01-2019 00:30 2853896

Busla,
Цитата:

Цитата Busla
что будет, если во входном файле попадутся угловые скобки? »

Думаю, много чего может попасться, чтобы батник сломался. Надо быть уверенным в допустимом наборе символов (Rey71, увы, дал очень мало инфы и потребовал CMD), или надо делать на чём-то другом. Например, vbs.

alpap 23-01-2019 04:51 2853905

Файл 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


Rey71 23-01-2019 06:35 2853908

Вложений: 1
Медицинское учреждение. Ежемесячно формируется отчет в фонд обязательного медицинского страхования.
Перед отправкой отчета программа ФОМС проверяет отчет на наличие ошибок и формирует текстовый файл. (прикладываю образец файла с первыми двумя пациентами и ошибками по ним)
в файле первая строка начинается с символа # и содержит информацию о пациенте, проводимом лечении и т.д.
следующие строки каждая содержит ошибку которую необходимо исправить и так до строки начинающейся со знака #.

Необходимо разделить этот файл на несколько файлов которые будут группироваться по ошибкам чтобы раздать мед персоналу для исправления ошибок.
причем необходимо учесть следующее:
Строка с ошибкой может быть как одинаковой целиком, например "У новорожденного не указан вес (не заполнено поле Weight)"
так и совпадающей только частью строки, например "Значения полей KPG и KSG не соответствуют справочнику KSG.DBF в отчетном периоде : KPG= 16, KSG=110"
где значения "KPG= 16, KSG=110" могут меняться в разных строках ошибок.

как вариант можно создать файл с образцами основных ошибок и группировать по ним а если встретятся ошибки не существующие в файле образца ошибок то их собрать в отдельный файл.

Iska 23-01-2019 08:10 2853916

Цитата:

Цитата Rey71
как вариант можно создать файл с образцами основных ошибок »

Не «как вариант», а только так, ибо иначе кто будет определять:
Цитата:

Цитата Rey71
Строка с ошибкой может быть как одинаковой целиком… так и совпадающей только частью строки, »

что где?!

Оптимальный вариант, как я вижу — собирать виды ошибок сразу в виде регулярных выражений, для WSH или PoSH.

YuS_2 23-01-2019 10:29 2853932

Цитата:

Цитата Rey71
Перед отправкой отчета программа ФОМС проверяет отчет на наличие ошибок и формирует текстовый файл. (прикладываю образец файла с первыми двумя пациентами и ошибками по ним) »

Надо понимать так, что поведение программы, выдающей текстовый файл проверки отчета, изменить невозможно? Например, чтобы в итоговый файл, помимо самих ошибок, ещё выводился бы и код ошибки, по которому можно было бы их однозначно идентифицировать?

Цитата:

Цитата Rey71
Необходимо разделить этот файл на несколько файлов которые будут группироваться по ошибкам чтобы раздать мед персоналу для исправления ошибок. »

Это надо понимать так:
В каждый отдельный файл, должны быть выведены только конкретные по типу ошибки, т.е. в каждом файле свои ошибки, привязанные к конкретному пациенту? Ну, нет смысла выводить в каждый файл весь список ошибок, если уж их требуется разделить. Иначе, проще разбить файл на определенное число пациентов, затем вывести их в файлы с полным содержимым ошибок по каждому пациенту...

Цитата:

Цитата Rey71
как вариант можно создать файл с образцами основных ошибок и группировать по ним а если встретятся ошибки не существующие в файле образца ошибок то их собрать в отдельный файл. »

Да-да, правильно выше сказали, что только так, если нет возможности вывода вместе с ошибками и кодов этих ошибок...

megaloman 23-01-2019 11:03 2853944

Как подсознательно чувствовал, кодировка файла 1251. Долой CMD.
ИМХО, в программе ФОМХ (совершенно с ней не знаком) заполняются некие поля.
Цитата:

Цитата Rey71
Строка с ошибкой может быть как одинаковой целиком, например "У новорожденного не указан вес (не заполнено поле Weight)"
так и совпадающей только частью строки, например "Значения полей KPG и KSG не соответствуют справочнику KSG.DBF в отчетном периоде : KPG= 16, KSG=110"
где значения "KPG= 16, KSG=110" могут меняться в разных строках ошибок. »

Цитата:

Цитата Iska
Оптимальный вариант, как я вижу — собирать виды ошибок сразу в виде регулярных выражений, для WSH или PoSH. »

ИМХО, это достаточно громоздко и не гибко.
Цитата:

Цитата alpap
Rey71, не лучше ли это все было делать в excel »

Если заполняются поля и, кстати, они, похоже, поминаются в аварийном сообщении, то напрашивается решение:
формируем таблицу Excel по шаблону.
В первом столбце шаблона -заголовок секции (то, что начинается с #)
Во втором - ошибка без указания опознанного в строке сообщения поля - наверное, возможно и такое? Как, в принципе: когда имя поля в сообщении отсутствует, так и как упущении при создании Excel-шаблона: айтишник в атаку - дополняй шаблон, если надо.
В последующих - имена всех заполняемых полей. Сюда будут попадать сообщения, в котором помянуто поле в заголовке.
После импорта текстового файла в таблицу, созданную по шаблону, удаляем (скрываем?) столбцы, в которые ничего не попало, для лучшей читаемости.
Похоже, разный медперсонал отвечает за заполнение разных полей.
Флаг в руки! В фильтре таблицы каждый может указать отбор по своим непустым полям.
Вуаля!
ИМХО, довольно объёмная работа и для тестирования понадобится реальный файл.

Обычно я пытаюсь смотреть на инфу глазами конечного пользователя. Что он получает сейчас и что его в этом не устраивает? Сформулируйте, приведите примеры, прежде чем пытаться что-то делать, тыкая пальцем в небо.

Можно пойти по пути Iska, но немного не так.
Без Excel, например, в VBS, сформировать массив со списком полей в виде строки с разделителем для каждого пользователя и формировать столько файлов с копиями секций исходного файла, сколько элементов в этом массиве. Это более простое решение.

Busla 23-01-2019 12:41 2853983

Теперь это уже немножко офтопик - мне было интересно решить задачу в первоначальной формулировке на powershell:

Код:

$errors = @{}

switch -Regex -CaseSensitive -File 'errors.log' {
    '^#.*' {   
        $section = [System.Collections.Generic.List[String]]$_
        continue
    }
    default {
        $section.Add($_)
        $errors[$_] += [System.Collections.Generic.List[String]]$section
    }
}

$errors.Values | .{begin{$n=0} process{$n++; Add-Content -Path "$n.txt" -Value $_ }}


YuS_2 23-01-2019 13:10 2853994

Ну тогда и я на powershell со своей идефикс, что выводить все ошибки по каждому пациенту в разные файлы иррационально.
Принцип:
для каждой ошибки свой файл, если есть ошибка с привязкой к пациенту, то выводим такую ошибку в определенный для неё файл:
Код:

$fle = 'obraz.txt'
$err_out = 'error_out.txt'

gc $fle -enc default|%{$flg,$arr,$err=$true,@(),@()}{
        if ($_ -match '#\s*\d+'){$name = $_} else {
                $tmp = $_
                for ($i=0;$i -lt $arr.count;$i++){
                        if ($tmp -match $arr[$i]){
                                $name,$tmp|out-file "$($i+1).txt" -enc default -app
                                $flg = $false
                        }
                }
                if ($flg){
                        $arr += ($tmp -replace '^([^:\(,]*).*','$1')
                        $name,$tmp|out-file "$($i+1).txt" -enc default -app
                        $err+=$tmp
                }
                $flg=$true
        }
}
$err|sc $err_out -enc default

бонусом выводится перечень уникальных ошибок...

megaloman 23-01-2019 19:42 2854124

Rey71,
VBS. Немного оффтоп, считаю, что ошибка занимает всю строку целиком. Для удобства вывел ошибку в заголовок сформированного файла.
Отельным файлом с номером 0000 выдал список ошибок и номера файла, где они фигурируют
Код:

FileIn = "Z:\Box_In\Errors\исходный файл.TXT"
' FileIn = "Z:\Box_In\Errors\obraz.TXT"
BoxOut = "Z:\Box_In\Errors"

Set FSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
Set fIn = FSO.OpenTextFile(FileIn, 1, False)

If Err.Number <> 0 Then
    MsgBox "Ошибка при открытии" + vbCrLf + FileIn + vbCrLf + vbCrLf + Err.Description
    WScript.Quit 2
End If
On Error GoTo 0

Alls = fIn.ReadAll
fIn.Close

MasAll = Split(Alls, vbCrLf)
MasN = Split(Alls, "#")

A0 = LBound(MasAll)
AN = UBound(MasAll)

N0 = LBound(MasN)
NN = UBound(MasN)

Set Alls = Nothing
ReDim MasErr(AN)
ie = A0 - 1

For Each s In MasAll
    If Not Len(Replace(s, " ", "")) = 0 Then
        If Not Mid(s, 1, 1) = "#" Then
            If ie = A0 - 1 Then
                ie = A0
                MasErr(ie) = s
            Else
                L = 0
                For i = A0 To ie
                    If s = MasErr(i) Then
                        L = 1
                        Exit For
                    End If
                Next
                If L = 0 Then
                    ie = ie + 1
                    MasErr(ie) = s
                End If
            End If
        End If
    End If
Next

DNow = Date
sNow = Mid(CStr(Year(DNow)), 3, 2) + Mid(CStr(Month(DNow) + 100), 2, 2) + Mid(CStr(Day(DNow) + 100), 2, 2)
DNow = Time
sNow = sNow + Mid(CStr(Hour(DNow) + 100), 2, 2) + Mid(CStr(Minute(DNow) + 100), 2, 2) + Mid(CStr(Second(DNow) + 100), 2, 2)

nFile = 10000

On Error Resume Next
Set fErr = FSO.CreateTextFile(BoxOut + "\" + sNow + "_" + Mid(CStr(nFile), 2) + ".txt", True)

If Err.Number <> 0 Then
    MsgBox "Ошибка при создании" + vbCrLf + vbCrLf + BoxOut + "\" + sNow + "_" + Mid(CStr(nFile), 2) + ".txt" + vbCrLf + Err.Description
    WScript.Quit 2
End If

For Each s In MasErr
    nFile = nFile + 1
    If nFile - 10000 > ie + 1 - A0 Then Exit For
    On Error Resume Next
    Set fOut = FSO.CreateTextFile(BoxOut + "\" + sNow + "_" + Mid(CStr(nFile), 2) + ".txt", True)

    If Err.Number <> 0 Then
        MsgBox "Ошибка при создании" + vbCrLf + vbCrLf + BoxOut + "\" + sNow + "_" + Mid(CStr(nFile), 2) + ".txt" + vbCrLf + Err.Description
        WScript.Quit 2
    End If
    fErr.WriteLine Mid(CStr(nFile), 2) + " " + s
    fOut.Write "=== Ошибка " + s + vbCrLf + vbCrLf

    On Error GoTo 0

    For Each block In MasN
        If Not Len(Replace(Replace(block, vbCrLf, ""), " ", "")) = 0 Then
            If InStr(1, block, s) <> 0 Then
                    fOut.Write "#" + block
            End If
        End If
    Next
    fOut.Close
Next
fErr.Close
MsgBox "Скрипт завершен"


Rey71 24-01-2019 06:16 2854196

Всем огромное спасибо.
Понял что с наскока решить не получится.
Буду думать над правильной постановкой задачи.

YuS_2 24-01-2019 09:53 2854215

Цитата:

Цитата Rey71
Понял что с наскока решить не получится.
Буду думать над правильной постановкой задачи. »

Решить-то, как раз можно... вопрос именно только в постановке задачи.
Что в конечном итоге требуется получить?
Особенно, желательно описать подробнее это:
Цитата:

Цитата Rey71
несколько файлов которые будут группироваться по ошибкам чтобы раздать мед персоналу для исправления ошибок. »

т.е. как именно необходимо группировать ошибки? Для одного человека несколько пациентов со всеми ошибками или же для одного человека - только один тип ошибки?
то бишь:
1. Один файл - один тип ошибки, но по разным пациентам, у которых этот тип ошибки присутствует.
2. Один файл - несколько (сколько именно?) пациентов, причем со всеми ошибками по каждому, отобранному пациенту.
3. ... ?
Третьего варианта, лично я не вижу, т.к. при нахождении одного типа ошибки по одному пациенту, выводить все ошибки привязанные к этому пациенту в отдельный файл - не имеет смысл, т.к. не будет никакой упорядоченности, да и собственно, вообще никакого алгоритма отбора информации для вывода в разные файлы, в этом случае тоже не будет.

Sham 24-01-2019 11:52 2854233

Надо вычислять какой-то идентификатор строки ошибки. Например, удалить весь известный динамический контент в строке ошибки, (или всё, кроме кириллицы), привести к одному регистру, вычислить md5 от того, что осталось. Это будет ключ для группировки по ошибке (по файлам, или поле в БД).

Busla 24-01-2019 13:03 2854256

Sham, если понимать, что такое хэш-таблица, или представлять как устроены БД, то становится очевидным, что все эти велосипеды изобретены и реализованы до вас


Время: 08:26.

Время: 08:26.
© OSzone.net 2001-