Надеюсь, все хорошо! Я столкнулся с небольшой проблемой с плоским файлом, экспортируемым из Oracle PBCS, с некоторыми проблемами возврата каретки. Конечные пользователи - при вводе данных в PBCS - часто нажимают на экране ввода определенного поля данных. Когда экспортируются данные, представляющие определенную запись со всеми элементами данных, представляющими эту точку данных (пересечение) - представьте себе, как запись SQL - элемент записи, в котором пользователь нажал клавишу ввода, вызывает разрыв этой записи в этой точке - сдвигая остальную часть элементы данных в этой записи на следующую строку. Это очень плохо, так как каждая запись должна иметь одинаковое количество элементов - вызывая проблемы в процессе преобразования. Фактически одна уникальная запись становится двумя битыми записями.
Мне нужен скрипт Powershell, который просматривает неподходящую CR LF (систему Windows) и преобразовывает каждую уникальную запись. Однако большинство записей в простом файле в порядке, поэтому код должен быть способен отличить «в основном хорошие» от «очень плохих» случаев.
Мой плоский файл имеет разделитель трубы и имеет элемент заголовка. Элемент заголовка, возможно, не нужно рассматривать, так как я просто пытаюсь решить проблему - решение может потенциально рассмотреть количество значений свойств для записи заголовка, чтобы определить, как форматировать поврежденные записи на основе счетчика свойств с использованием разделителя канала. - но не уверен, что это необходимо.
Я буду честен - есть сценарии Jython, которые я пытался безрезультатно - поэтому я почувствовал, что в прошлом я использовал пару сценариев Powershell по другим причинам, что я использовал это снова. У меня есть сценарий для файла CSV - но это не совсем работает.
$file = Get-Content 'E:\EPM_Cloud\Exports\BUD_PLN\Data\EXPORT_DATA_BUD_PLN.txt'
$file| Foreach-Object {
foreach ($property in $_.PSObject.Properties) {
$property.Value = ($property.Value).replace("`r","").replace("`n","")
}
}
$file|out-file -append 'E:\EPM_Cloud\Exports\BUD_PLN\Data\EXPORT_DATA_BUD_PLN_FINAL.txt'
Вот несколько примеров того, что было бы до и после, если бы я мог заставить этот код работать.
Предполагается, что это будет одна запись - как вы видите, начиная с "$ 43K от ... пользователь нажал несколько раз клавишу ввода. Как вы видите, это разделитель трубы - я использую числовые номера строк, чтобы показать вам, что я имею в виду поскольку это не блокнот ++. Идея в том, что все это должно быть только на 1.
Contract TBD|#missing|#missing|#missing|#missing|ORNL to Perform Radio-Chemical (RCA) Measurements|#missing|#missing|#missing|#missing|"$43K from above
$92,903
$14,907
The current $150K to be reprogrammed to XXX, plus another $150K from Fuel Fac for this item to be reprogrammed to RES."|#missing|#missing|#missing|"Summary|X0200_FEEBASED|No_BOC|O-xxxx-B999|xx_xxx_xx_xxx|Plan|Active|FY19|BegBalance"|COMMIT
Вот так должен выглядеть вывод (вместо этого я прикрепил скриншоты). Все в 1.
Contract TBD|#missing|#missing|#missing|#missing|ORNL to Perform Radio-Chemical (RCA) Measurements|#missing|#missing|#missing|#missing|"$43K from above $92,903 $14,907 The current $150K to be reprogrammed to XXX, plus another $150K from Fuel Fac for this item to be reprogrammed to RES."|#missing|#missing|#missing|"Summary|X0200_FEEBASED|No_BOC|O-xxxx-B999|xx_xxx_xx_xxx|Plan|Active|FY19|BegBalance"|COMMIT
В других случаях строка разрывается только один раз - все определяется только тем, сколько раз пользователь нажимает. введите здесь описание изображения
Как вы видите на изображении данных - вы видите, как линия разделяется - это точка PowerShell. Как вы видите рядом с этим снимком экрана - другие строки просто в порядке.