Следующее упрощенное решение на основе Select-String
идентифицирует две части данных для извлечения по количеству содержащихся в них цифр (16
и 11
соответственно).
# Search for lines with cardholder numbers and include one line below
# (-Context 0, 1)
Select-String '\b\d{16}\b' $inputFile -Context 0,1 | ForEach-Object {
# Match the requestor ID on the line below.
$null = $_.Context.PostContext[0] -match '\b\d{11}\b';
# Output the cardholder number found by Select-String and the
# requestor ID found with -match
$_.Matches[0].Value + ',' + $Matches[0]
} # | Set-Content $outputFile
Удалите #
, чтобы сохранить в $outputFile
.
С вашим образцом входного файла это дает:
1234567890123456,45432112345
5678901234561234,45432112345
Что касается того, что вы пытались :
$lineRequestor = $line + 1
Вместо получения следующей строки ввода выполняется объединение строк с текущей строкой и добавление '1'
к нему.
Как правило, вы не можете (легко) пропускать перечисление, выполняемое циклом foreach
. [1]
Если вы хотите это сделать, используйте цикл for
с индексами , как в следующем упрощенном примере:
$lines = 'one', 'two', 'three', 'four'
for ($i = 0; $i -lt $lines.Count; ++$i) {
# Output a pair of lines.
"item + next item: " + $lines[$i] + ', ' + $lines[++$i]
}
[1] Технически, вы можете, но решение неясно, через автоматическую $foreach
переменную:
foreach ($line in 'one', 'two', 'three', 'four') { $null = $foreach.MoveNext(); $nextLine = $foreach.Current; "$line - $nextLine" }