2015-06-12 2 views
-3

У меня есть следующее требование. Мне нужно перечислить все таблицы из файлов prm Golden Gate. Я хочу использовать регулярное выражение, чтобы вытащить список из куска строки. Формат данных выглядит следующим образом:вытащить отображение таблицы в программе репликации GoldenGate

MAP AFF_INTEGRATION.SFDC_ACCOUNT , Target dbo.AFF_INTEGRATION_SFDC_ACCOUNT_EXCEPTION , 

--MAP AFF_INTEGRATION.SFDC_USER , Target er_service.dbo.AFF_INTEGRATION_SFDC_USER , 

Я хочу, чтобы данные в табличном формате:

AFF_INTEGRATION.SFDC_ACCOUNT  dbo.AFF_INTEGRATION_SFDC_ACCOUNT_EXCEPTION 

Примечание: Строки, которые содержат -- следует игнорировать.

Редактировать: Обновлен текст ввода текста в вопросе. Поэтому в основном я должен разделить содержимое после MAP и заканчивая на ,, и аналогичным образом для Target.

+1

Добро пожаловать на SO Ammet. Я хотел бы отметить, что предполагается, что вы попытаетесь выяснить эти вещи самостоятельно. Если/Когда у вас есть проблемы, вы можете показать нам, что вы пробовали, а затем мы можем попытаться помочь вам исправить его. Мы - сообщество, помогающее программистам и программистам-энтузиастам. Мы не являемся сервисом для написания кода – Matt

+0

В дополнение к тому, что я уже сказал, включая ваш ожидаемый результат, было бы хорошо, поскольку я не знаю формат PRM, но я знаю регулярное выражение. Это может быть и для других. – Matt

+0

Matt, я использовал следующее регулярное выражение, чтобы выбрать? (MAP) \ s + ([a-zA-Z0-9] | \. | \ _ | \ *) + Но он выбирает все, мне нужна помощь, чтобы исключить линии, начинающиеся с '-'. Для этого я использовал следующее, но не работает [^ (-)] (? (MAP) \ s + ([a-zA-Z0-9] | \. | \ _ | \ *) +) . +? –

ответ

0

Просто прочитать входной файл, игнорировать строки, начинающиеся с --, разделенным и вновь присоединиться оставшиеся строки и записать результат обратно в файл:

Get-Content 'C:\path\to\input.txt' | 
    ? { $_ -notmatch '^(\s*$|--)' } | 
    % { $_ -split '\s*,\s*' -join "`t" } | 
    Set-Content 'C:\path\to\output.txt' 

Состояние $_ -notmatch '^\s*$' только для пропуска над пустыми линиями. Если у вас нет пустых строк в вашем входном файле, вы можете удалить его.

Edit: На второй мысли вы также можете заменить разделители вместо расщепления и повторного присоединения к линии:

Get-Content 'C:\path\to\input.txt' | 
    ? { $_ -notmatch '^(\s*$|--)' } | 
    % { $_ -replace '\s*,\s*', "`t" } | 
    Set-Content 'C:\path\to\output.txt' 
Смежные вопросы