Оболочка Power для сложения нечетных чисел в нечетных строках и четных чисел в четных строках - PullRequest
0 голосов
/ 06 мая 2020

Power shell для сложения нечетных чисел в нечетных строках и четных чисел в четной строке, результат каждой строки должен появиться в стандартном выводе! В каждой строке не менее 2 цифр. Имя файла задается параметром.

for example this:
1 2 3
4 5 6 
5 6 7 
7 8 9
4 6 0
the output should be 
4
10
12
8
0

1 Ответ

0 голосов
/ 06 мая 2020

Вы можете прочитать содержимое файла с помощью Get-Content или cat, а затем превратить его в массив, разделив на \n

$lines = (Get-Content $filepath).split('\n')

Затем вы можете выполнить итерацию по каждой строке и разделить ее on '', а затем выполните итерацию по этому массиву и суммируйте нужные вам значения

for($i=0;$i -lt $lines.length;$i++){
  $numsInLine = $lines[i].split(' ')
  $lineSum = 0
  for($j=0;$j -lt $numsInLine.length;$j++){
    if($numsInLine[j] % 2 -eq $i % 2){ #$i is the line number, $numsInLine[j] is a number in that line
        $lineSum++
    }
  }
  Write-Host $lineSum 
}

Изменить: в ответ на комментарий Lee_Dailey% в этом содержимом является оператором по модулю. x% 2 возвращает четность x, а это именно то, что вам здесь нужно.

Также обратите внимание, что % в powershell - это псевдоним для ForEach-Object. % или ForEach-Object в PowerShell - это простой для каждого l oop, перебирающий все значения в массиве с более простым синтаксисом, но без индекса. В нашем случае я бы рекомендовал использовать его вместо второго только для l oop, поскольку мы используем индексную переменную в первой (используется примечание i). В этом случае второй l oop будет выглядеть так:

$numsInLine | %{ #or $numsInLine | ForEach-Object
    if($_ % 2 -eq $i % 2){ #$_ refers to the last returned object
        $lineSum++
    }
  }

Обратите внимание на две вещи:

1. % или ForEach-Object всегда используются после конвейера, поскольку они должен получить InputObject. InputObject также должен быть итеративным. Вот как различаются% по модулю и% по foreach.

$_ используется здесь как текущий повторяемый элемент. В нашем повторяемом элементе нет именованной переменной, отражающей его. $_ обычно используется, в частности, в конвейере и циклах foreach (однако вы можете использовать его и в любом другом случае).

Другой логически равный синтаксис:

foreach($num in $numsInLine){
    if($num % 2 -eq $i % 2){
        $lineSum++
    }
  }

Обратите внимание, что здесь нет конвейера или $_ не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...