(muka) "kieron" ongelman ratkaisu

[vastaus aiempaan viestiin]

Kirjoittaja: Kimmo Vehkalahti
Sähköposti:    -
Päiväys: 24.3.2012 10:09

(muka) "kieron" muunnosongelman jatkokertomuksen päätösosa:

Olin tyytyväinen saatuani homman hoidettua ilman ylimääräisiä
muuttujia, mutta Reijolla ja Petrillä oli vielä takataskussa
täydennyksiä ja yksinkertaistuksia, joista taas sain itse lisää
vinkkejä. Siis pari iteraariota lisää:

Ensin Petrin kommentti:

  "Joo tuo suoraviivaisti hommaa selkeästi, eipä tullut siinä
  ajateltua VARin logiikkaa ihan loppuun saakka :)
  Itselläni tuo juokseva numerointi on usein tehty esim. HETUn
  kaltaisesta muuttujasta (silloin tarvittaneen
      if(str(HETU)<>str(HETU[-1]))....
  -lauseketta?)."

Sitten Reijon toteamus ja yksinkertaistus:

  "Tuo näytti ihan peruskauralta rekisteriaineistojen käsittelykentistäni.
  Tässä vielä yksinkertaistettu versio, jossa ei turhaan tarvita SERiä lainkaan:"

*DATA YRITYS4 z+1,z+18,z,z-1
*
*VAR y=1 TO YRITYS4 / IND=ORDER,1
*VAR y=if(x>10)then(y[-1]+1)else(y[-1]) TO YRITYS4 / IND=ORDER,2,999
*
*11    1          1
zx     y          z
*2                1
*3                1
*1                1
*4                1
*6                1
*6                1
*9                1
*11               2
*8                2
*1                2
*3                2
*5                2
*5                2
*2                2
*13               3
*2                3
*2                3
*3                3
*.......................................................

Lopulta huomasinkin, että homma hoituu yhdellä komennolla:

*DATA YRITYS5 w+1,w+18,w,w-1
*
*VAR y=if(ORDER=1)then(1)else(if(x>10)then(y[-1]+1)else(y[-1])) TO YRITYS5
*
*11    1          1
wx     y          z
*2                1
*3                1
*1                1
*4                1
*6                1
*6                1
*9                1
*11               2
*8                2
*1                2
*3                2
*5                2
*5                2
*2                2
*13               3
*2                3
*2                3
*3                3
*.......................................................

En suoralta kädeltä osannut kirjoittaa komentoa noin, mutta jälkeenpäin
se näyttää tietenkin helpolta ja suoraviivaiselta tavalta ilmaista tämä
muunnos. Olen Survoa käyttänyt aika kauan (yli 20 vuotta), joten luulisi
tällaisten tehtävien jo pikkuhiljaa sujuvan... :) Eipä silti, aina oppii
lisää, ja varsinkin, kun näkee, mitä ja miten muut tekevät näitä hommia.

Petrin lopputoteamus tähän oli:

 "Tuo yo. lienee olennaisesti sama logiikka kuin mitä eilen saatiin,
 paitsi että menee nyt yhdellä rivillä (ilman alustuksia).
 Muutoskohdan tunnistamisessa if(x>10) tilalla mulla on yleisimmin
 if(x<>x[-1]) tyyppinen vertailu."

Tästä keskustelu jatkui uusille urille, mutta niitä voisimme nyt sitten
käydä täällä Survo-palstalla. Kuten tämä tarinakin osoittaa, kokenutkin
käyttäjä oppii aina uusia temppuja Survolla/Musteella työskennellessään.

- Kimmo

Vastaukset:

Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.