[viesti Survo-keskustelupalstalla (2001-2013)]
Kirjoittaja: | Seppo Mustonen |
---|---|
Sähköposti: | - |
Päiväys: | 31.12.2001 16:42 |
Olen Marjutin toivomuksesta (esitetty säikeessä "Machoaminen":) yleistänyt SURVO MM:n FILE COPY -operaatiota siten, että MATCH-täsmennykseen saa laittaa useita muuttujia. Alla on pelkistetty esimerkki siitä, mitä tällöin tapahtuu. Laajennus astuu voimaan versiosta 1.15 eteenpäin. Ennen tuota esimerkkiä kuitenkin muutamia huomautuksia Survon päivitystekniikasta: Kuten Survoa käyttävät tiennevät, olemme pyrkineet siihen, että uusiin haasteisiin vastataan (silloin kun ne ovat kiinnostavia ja aiheellisia) aika nopeasti. Survostahan uusi versio ilmaantuu tyypillisesti parin viikon - kuukauden välein. Uusien versioiden näin poikkeuksellisen tiheä liikkeellepäästö on varmasti monien mielestä tarpeetonta riskinottoa, sillä jokainen vanhaan ohjelmamoduliin (tässä tapauksessa <Survo>\U\FI\COPY.EXE) tehty muutos tai lisäys voi häiritä entisiä toimintoja. Näin saattaa tapahtua, vaikka muutos olisi tehty "aivan virheettömästi", sillä sen seurauksena pintaan voi nousta roskia (aikaisempia ohjelmointivirheitä), jotka eivät sattuneet aikaisemmin haittaamaan. Jotta em. ongelmat mahdollisimman hyvin vältettäisiin, noudatan ohjelmamodulien päivityksessä sellaista sääntöä, että aikaisempaan koodiin kosketaan niin vähän kuin mahdollista ja kirjoitetaan uudet kuviot omana koodinaan. Tässä MATCH-täsmennyksen yleistyksessä toimin seuraavan, pelkistetyn ohjelmakaavion mukaisesti: match_copy() { // Tähän on tultu, jos FILE COPY:n yhteydessä on käytetty // MATCH-täsmennystä Jos MATCH-täsmennyksessä on ainakin 2 parametria, { match_copy2(); // siirrytään uuteen yleistettyyn koodiin return(1); // kopiointi tehty ja poistutaan } Tässä vanha match_copy-koodi sellaisenaan return(1); } match_copy2() { Tässä vanha match_copy-koodi muunnettuna yleistettyyn muotoon return(1); } Koska vanhaan C-kieliseen match_copy()-funktioon ei ole tehty muuta muutosta kuin MATCH-täsmennyksen luonteen testaus, entiset käyttötavat seurailevat tarkalleen vanhaa koodia ja siten toimivat entiseen tapaan. Mahdollinen riski jää uuden match_copy2()-funktion puolelle ja koskee siis tilanteita, joissa MATCH-täsmennyksessä on ainakin kaksi parametria (eli ei siis mitään haittaa vanhoissa tilanteissa). Jotta match_copy2():kin toimisi mahdollisimman luotettavasti, olen kirjoittanut sen yksinkertaisesti kopioimalla ensin vanhan koodin sellaisenaan ja yleistämällä sitten hyvin mekaanisella tavalla sen kattamaan useamman MATCH-avaimen tapauksen. Tässä muutoksessa minun ei ole tarvinnut juuri lainkaan "ymmärtää" aikaisemman koodini yksityiskohtia. Ehkä joku ajattelee, että tuohan on sitä samaa, mitä hölmöläiset tekivät peittoa jatkaessaan, mutta huomattakoon, että informaatio on tunnetusti hyödyke, joka ei jaettaessa vähene (lukuunottamatta nyt mm. sellaista mitätöntä tietoa kuin ensi viikon oikea Lottorivi, joka muuten on ... hetkinen ... pääsi pahus unohtumaan!). Koska match_copy2():n pitäisi toimia yhdenkin MATCH-avaimen tapauksessa, on myöhemmin mahdollista lyhentää koodia jättämällä alkuperäinen match_copy() kokonaan välistä pois. Sitä en kuitenkaan tee ehkä koskaan, sillä tehty muutos on kasvattanut COPY-modulia noin 115 kilotavusta 119 kilotavuun eli vain noin 4000 tavulla. Lyhennys olisi sikälikin aiheeton, että match_copy2() yleisyydessään on hiukkasen hitaampi kuin match_copy() myös yhden MATCH-avaimen tapauksessa. Tässä lopuksi lupaamani esimerkki: Kentässä olevat aineistot K1 ja K2 kopioidaan datatiedostoiksi DK1 ja DK2, minkä jälkeen käytetään FILE COPY:a kahdella tavalla. *DATA K1 *Nro Aika X Nimi * 1 11:03 T1103 Turku * 2 11:13 H1113 Helsinki * 3 15:12 H1512 Helsinki * 7 15:44 T1544 Turku * *DATA K2 *Nro Aika Nimi X * 1 11:03 Helsinki XXXXXXXXX * 2 11:03 Turku XXXXXXXXX * 3 11:04 Helsinki XXXXXXXXX * 4 11:05 Helsinki XXXXXXXXX * 5 11:13 Turku XXXXXXXXX * 6 11:13 Helsinki XXXXXXXXX * 7 15:12 Turku XXXXXXXXX * 8 15:06 Helsinki XXXXXXXXX * 9 15:12 Helsinki XXXXXXXXX *10 15:44 Helsinki XXXXXXXXX *11 15:12 Turku XXXXXXXXX *12 15:44 Turku XXXXXXXXX * *FILE DEL DK1 *FILE DEL DK2 *FILE COPY K1 TO DK1 *FILE COPY K2 TO DK2 * *..................................................................................... *Yleistetty käyttötapa, joka antaa toivotun tuloksen: *FILE COPY DK1 TO DK2 / MATCH=Aika,Nimi VARS=X *..................................................................................... *FILE LOAD DK2 *DATA DK2*,A,B,C C Nro Aika Nimi X A 1 11:03 Helsinki XXXXXXXXX * 2 11:03 Turku T1103 * 3 11:04 Helsinki XXXXXXXXX * 4 11:05 Helsinki XXXXXXXXX * 5 11:13 Turku XXXXXXXXX * 6 11:13 Helsinki H1113 * 7 15:12 Turku XXXXXXXXX * 8 15:06 Helsinki XXXXXXXXX * 9 15:12 Helsinki H1512 * 10 15:44 Helsinki XXXXXXXXX * 11 15:12 Turku XXXXXXXXX B 12 15:44 Turku T1544 *..................................................................................... *FILE DEL DK1 *FILE DEL DK2 *FILE COPY K1 TO DK1 *FILE COPY K2 TO DK2 * *...................................................................... *Vanha käyttötapa, joka ei riitä antamaan "oikeaa" tulosta: *FILE COPY DK1 TO DK2 / MATCH=Aika VARS=X *...................................................................... *FILE LOAD DK2 *DATA DK2*,D,E,F F Nro Aika Nimi X D 1 11:03 Helsinki T1103 * 2 11:03 Turku XXXXXXXXX * 3 11:04 Helsinki XXXXXXXXX * 4 11:05 Helsinki XXXXXXXXX * 5 11:13 Turku H1113 * 6 11:13 Helsinki XXXXXXXXX * 7 15:12 Turku H1512 * 8 15:06 Helsinki XXXXXXXXX * 9 15:12 Helsinki XXXXXXXXX * 10 15:44 Helsinki T1544 * 11 15:12 Turku XXXXXXXXX E 12 15:44 Turku XXXXXXXXX
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!