Задача — получить из 6882463283678273808479 строку «DR. SCRIPTO». Ерунда 😉
SD4.ps1
$(foreach($c in([char[]](gc C:\scripts\numbers.txt))){[char][int]"$c$($foreach.movenext()|out-null;$foreach.current)"})-join''
Но вот разобрать и прокомментировать этот ужас куда сложнее… И поэтому я просто переписал ту же логику заново, но более понятно 🙂
SD4_easy.ps1
# Инициализируем переменную $Result для хранения итоговой строки. $Result = "" # Получаем содержимое файла в переменную. $stringNumbers = Get-Content "C:\scripts\numbers.txt" # Преобразуем строку в массив символов $charNumbers = [char[]]$stringNumbers # Для каждого символа в массиве... foreach ($FirstNumber in $charNumbers) { # Сдвигаем перебор на одну итерацию вперед с помощью метода MoveNext() # специального объекта $ForEach (который доступен только внутри цикла foreach. $Foreach.MoveNext() | Out-Null # Помещаем следующий символ в переменную $SecondNumber. $SecondNumber = $Foreach.Current # Объединяем оба номера в число, которое и является кодом символа. [int]$CharCode = $FirstNumber+$SecondNumber # Преобразовываем число в символ, и добавляем к $Result. $Result += [char]$CharCode } # Выводим результат. $Result
Кстати у MoW получилось еще короче и красивее.