Sulje

Skriptauskisojen tehtävät, osa 3 

skriptaten 12.2.2008 klo 08:36
Hyvä 45

Tässä vaiheessa, kun kisojen alkuun on enää muutama päivä, on korkea aika tutustua vuoden 2007 kisojen toiseen lajiin, PowerShell skriptaukseen. PowerShellissä oli, kuten VBScriptissäkin, kaksi kategoriaa. Vasta-alkajat ja kehittyneemmät. Tehtävät olivat tismalleen samat kuin VBScriptissä, mutta skriptit täytyivät toteuttaa - kuinka yllättävää - PowerShellillä.

Jos tässä vaiheessa pulpahtaa mieleen kysymys, että mikä tää PowerShell on, voit ajatella sen olevan parasta mitä Windows-maailmaan on koskaan keksitty noin niinkuin hallintamielessä. Otetaan Bourne Shell ja tehdään sitä olio-pohjainen. Se on PowerShell. Tästä aiheesta on vielä joku neropatti pitänyt esityksen Suomenlinnassa, Messukeskuksessa ja Intternetissä.

No joo, yhtä kaikki. Nyt tsekataan vielä vuoden 2007 kisojen Beginner-osion viides tehtävä "ABCs and 123s". Ja tarkoitus on tutustua ratkaisuun PowerShellissä. Tehtävänannossa pyydetään ottamaan merkkijono "It was the best of times...you know the rest.", ja rakentamaan skripti joka käy läpi jokaisen merkin, tulostaen merkin ASCII-arvon ruudulle.

Itse en tehnyt kyseistä tehtävää viime vuoden kisoissa, joten piti hieman pohtia miten asiaa lähestyisi. Ensimmäisenä mieleen juolahti tietysti ajatus, että miten PowerShellissä saa merkille tulostettua sen ASCII-arvon. VBScriptissä homma sujuu ASC funktiolla. Koska PowerShell on olio-pohjainen ympäristö, lähdin tutkimaan löytyisikö muuttujalle jäsenenä metodia, joka homman tekisi. Eipä löytynyt. Mutta ennenkuin otin edes hätää käteen, muistin dokkarin joka on tehty nimenomaan meikäläistä varten. Eli kaverille joka osaa tehdä VBScriptillä kaikenlaista, mutta jolla ei ole mitään hajua (vielä) miten homman hoitaa PowerShellissä. Dokkarin nimi on Conversion Guide.

Kyseisestä dokkarista löytyi kätevästi VBScriptin ASC funktion toiminnallisuuden kääntäminen PowerShelliin.

Ohje kuuluu:

$a = [byte][char] "A"

Ohje ei tietysti ratkaise koko hommaa, sillä skriptin piti käydä läpi merkkojonon jokainen merkki. Ratkaisumalleja on varmasti useita, mutta päädyin hyödyntämään, jo pelkästään demomielessä, PowerShellin olio-pohjaisuutta.

Ensin tallennetaan tehtävän merkkijono muuttujaan PowerShellissä:

$merkkijono = "It was the best of times...you know the rest."

Tämän jälkeen kutsutaan muuttujan jäsentä, ToCharArray metodia, joka räjäyttää merkkijonon matriisiin (engl. array):

$matriisi = $merkkijono.ToCharArray()

Seuraavaksi voimme loopata matriisin jokaisen solun läpi foreach funktiolla:

foreach ($s in $matriisi) { codeblock }

Ja kuinka ollakaan, foreach-loopin codeblockiin sijoitetaan Conversion Guidesta löytynyt litania, täydennettynä $s muuttujalla, joka on vuorossa olevan matriisin solun arvo.

Eli kisojen vastaus, joka tuomareille pitäisi lähettää, voisi näyttää seuraavalle:

$merkkijono = "It was the best of times...you know the rest."

$matriisi = $merkkijono.ToCharArray()

foreach ($s in $matriisi) { [byte][char] $s }

Tässä esimerkissä lähdin siitä, että tiesin miten homma tapahtuu VBScriptissä ja muistin, että oli olemassa Conversion Guide. Nyt jos näin ei olisi ollut, olisin luultavasti päätynyt googlettamaan ohjeen. 


 
Kirjoita kommentti
Ohjeet: Pysy aiheessa ja kirjoita napakasti. Muista, että haastateltavilla, kanssakeskustelijoilla ja toimittajilla on oikeus omaan, eriävään mielipiteeseen. Ole kohtelias ja ystävällinen, äläkä tarkoituksella provosoi tai hauku muita keskustelijoita. Taloussanomat varaa oikeuden poistaa asiattomat viestit. Varauduthan siihen, että linkkejä sisältävät viestit tarkistetaan yksitellen roskapostin suodattamiseksi. Arvostamme mielipidettäsi!
> Lue koko keskusteluetiketti