Когда слово соответствует, извлекает переменную строку после него - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть запрос, который выглядит так:

FROM TableA 
INNER JOIN TableB
ON TableA.xx = TableB.xx
INNER JOIN TableC
ON TableA.yy = TableC.yy

Я пытаюсь написать скрипт, который выбирает таблицы, которые идут после слова "JOIN".

Сценарий, который я написал сейчас:

$data = Get-Content -Path query1.txt
$dataconv = "$data".ToLower() -replace '\s+', ' '
$join = 0

$overigetabellen = ($dataconv) | foreach {
    if ($_ -match "join (.*)") {
        $join++
        $join = $matches[1].Split(" ")[0]  
        #Write-Host "Table(s) on which is joined:" $join"."
        $join
    }
}
$overigetabellen

Это дает мне только первую таблицу, поэтому TableB. Может кто-нибудь помочь мне, как я получаю вторую таблицу также в качестве вывода?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Обработка ваших данных с помощью Select-String:

$data | Select-String -AllMatches -Pattern '(?<=join\s+)\S+' |
    Select-Object -Expand Matches |
    Select-Object -Expand Groups |
    Select-Object -Expand Value

(?<=...) - это так называемое положительное утверждение с задним взглядом, которое используется для сопоставления с шаблоном без включения в возвращаемый результат.строка (то есть возвращаемые совпадения - это просто имена таблиц без JOIN перед ними). ​​

0 голосов
/ 24 апреля 2018

Это моя наивная попытка найти нужные имена таблиц.

Разделить введенные данные на пустое пространство в массив, найти индексы слова «JOIN», а затем получить доступ к следующим индексам после слова «JOIN».

$data = Get-Content -Path query1.txt
$indices = @()
$output = @()

$dataarray = $data -split '\s+'
$singleIndex = -1
Do{
    $singleIndex = [array]::IndexOf($dataarray,"JOIN",$singleIndex + 1)
    If($singleIndex -ge 0){$indices += $singleIndex}
}While($singleIndex -ge 0)

foreach ($index in $indices) {
$output += $dataarray[$index + 1]
}

Выходы:

TableB

TableC

Вы можете настроить ввод заглавных букв (если вы вводите все строчные буквы) и т. Д. При необходимости, если вы ожидаете изменения входных файлов.

...