FILE COPY ja Survon päivitystekniikasta

[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!

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