Pchełki Powershell: generujemy losowy ciąg liter

https://xpil.eu/atl

Każdy programista dociera prędzej czy później do momentu, kiedy musi skonstruować losowy ciąg znaków. A to plik tymczasowy utworzyć, a to wygenerować jakieś dane testowe, a to cholera wie co jeszcze.

Dziś pokażę jednolinijkową pchełkę jak zrobić to w PowerShell-u, czyli ulubionym języku skryptowym windowsowych ignormatyków.

A przynajmniej tych, którzy lubią PowerShell 😉

Tradycyjnie już zacznę od gotowego kodu, a potem rozbierzemy go na czynniki pierwsze niczym dojrzałą cebulę.

Kod:

$(-join ((65..90)| Get-Random -Count 10| % {[char]$_}))

Wynik:

CMDIAVFNSO

Jeżeli powyższa zbitka liter wygląda dla Ciebie, Czytelniku, jak efekt tańca pijanego, kulawego rosomaka po klawiaturze w układzie Dvoraka, spieszę z wiadomością, że dla mnie też tak na początku wyglądała 😉

Spróbujmy teraz rozebrać powyższy zbiór hieroglifów na części.

Zaczniemy od (65..90). Jest to nic innego jak posortowana tablica liczb całkowitych od 65 do 90. Dlaczego akurat taki zakres? Kod ASCII litery "A" to 65, z kolei "Z" ma kod 90. Będziemy więc losować spośród tych liter.

Get-Random wybiera losowy element z tablicy. Opcjonalny parametr -Count mówi ile elementów ma zostać wybranych (uwaga: losowanie odbywa się bez powtórzeń).

Tym samym (65..90) | Get-Random -Count 10 wylosuje nam dziesięć liczb z zakresu 65-90. Wynikiem jest tablica z owymi dziesięcioma liczbami.

Dalej mamy znak procenta %, którego w zasadzie nie powinienem omawiać, ponieważ zakładam, że większość moich Czytelników to Polacy, a polska nacja jest z procentami zaznajomiona. Ale omówię, dla pełnego obrazu.

Otóż % to nic innego jak alias dla polecenia For-Each, czyli pętli przebiegającej po wszystkich elementach kolekcji. W naszym przypadku kolekcją jest dziesięć wylosowanych liczb z przedziału 65-90.

Kod w nawiasach klamrowych po operatorze % wykona się raz dla każdego elementu kolekcji, a więc w naszym przypadku dziesięć razy. $_ to zmienna specjalna, do której trafiać będą kolejne elementy kolekcji w poszczególnych iteracjach. Natomiast [char] to sposób na konwersję wartości na znak. Działa tak, że jeżeli dostanie na wejściu liczbę, skonwertuje ją na odpowiadający tej liczbie znak według standardu ASCII. Tu następuje zamiana liczby na literkę.

Wreszcie całość powyższych operacji, czyli tablica dziesięciu losowo wybranych liter, trafia do operatora -join, który "spoziomia" tablicę, a więc zamienia ją na pojedynczą wartość tekstową o długości dziesięciu znaków.

Całość jest ujęta w nawiasy i poprzedzona znakiem dolara, który "uzmiennia" nam wyrażenie w nawiasie, innymi słowy pozwala potraktować treść nawiasu jako zmienną. Można to potem podstawić to jakiejś "prawdziwej" zmiennej, na przykład tak:

 

$MojeZnaki = $(-join ((65..90)| Get-Random -Count 10| % {[char]$_}))

https://xpil.eu/atl

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.