K-Kieli Käyttäjän käsikirja


3. K-kielen kuvaus

3.1 Kommentit

K-kielisessä ohjelmassa voi olla kommentteja, jotka ovat seuraavia muotoja:

        /* kommentti */         voi esiintyä missä tahansa 
        // kommentti            rivin loppu kommenttia 
        -- kommentti            rivin loppu kommenttia 

Kommenteilla ei ole mitään merkitystä ohjelman toiminnalle.

Jatkossa esimerkeissä on käytetty -- merkintää.

3.2 Muuttujat

Muuttujien nimet koostuvat dollarimerkistä ($), jota seuraa yksi tai useampi kirjaimia, numeroita ja alleviivauksia. Isot ja pienet kirjaimet merkitsevät samaa merkkiä. Muuttujia ei tarvitse erikseen esitellä, vaan muuttuja saa tyyppinsä ja arvonsa sijoitettavan arvon perusteella.

Esim:

                $mja = 1;       -- kokonaisluku  
                $MJA = 1;       -- kokonaisluku = $mja 
                $mja = 1.012;   -- reaaliluku 
                $mja = "KALLE"; -- merkkijono 

3.3 Sijoituslause

Sijoitutettava arvo voi olla muuttuja, vakio, monimutkaisempi aritmeettinen lauseke, Boolen lauseke, sql-lauseke tai select-lauseke.

        Syntaksi:       $mja = lauseke  
                        $mja1, $mja2, ... = lauseke 
         
        Toiminta:       muuttujille annetaan lausekkeen arvo 

        Esim: 
                $mja = 1;                  -- kokonaisluku  
                $Mja = 1;                  -- kokonaisluku =mja=MJA=Mja 
                $mja = 1.012;              -- reaaliluku 
                $mja = 1+2+(4-2)/($c*2-1); -- aritmeettinen lauseke 
                $mja = "KALLE";            -- merkkijono 
                $nimi = "K-KIELI";         -- merkkijono 
                $a=(3<4);                  -- vertailu 
                $a,$b,$c = null;           -- alustetaan tyhjeellä kaikki a,b,c 
Sijoitettava lauseke voi olla myös null, joka tarkoittaa tyhjää merkkijonoa. Tyhjää merkkijonoa ei voi kirjoittaa muodossa "".

Select- ja SQL-lauseke käsitellään erikseen kohdassa SQL-lausekkeet, jossa käsitellään myös tilannetta, jossa sijoitusmerkin vasemmalla puolella on useampi kuin yksi muuttuja.

3.4 Aritmeettiset lausekkeet

        Syntaksi:       lauseke1 operaatio lauseke2 

Palautusarvo: aritmeettisen operaation tulos

Aritmeettisia operaatioita ovat: + yhteenlasku - vähennyslasku * kertolasku / jakolasku % jakojäännös

Lisäksi aritmeettisissa lausekkeissa voidaan käyttää sulkuja ().

        Esim: 
                $a = 1+2-4.5*100/3; 
                $a = (1+2-4.5*100)/3; 
                $a = -2.34; 
                $j = 100 % 21; 

3.5 Boolen lausekkeet

        Syntaksi:       lauseke1 operaattori lauseke2 

Palautusarvo: 1 jos tosi, 0 jos epätosi

Boolen operaattoreita ovat: < pienempi kuin <= pienempi tai yhtäsuuri kuin > suurempi kuin >= suurempi tai yhtäsuuri kuin = yhtäsuuri <> erisuuri ja ja tai tai

        $a= 3<4;                        -- a:n arvoksi 1 
        $a= (4<$b) ja (6>=$c);          -- a:n arvoksi 1 jos molemmat ehdot 
                                        -- tosia 

3.6 Ehtolause (jos-muuten-niin)

        Syntaksi:       jos lauseke niin lauseet muuten lauseet 

Palautusarvo: -

Toiminta: jos lausekkeen arvo on tosi, suoritetaan niin- lauseet, muussa tapauksessa muuten-lauseet

Esimerkkejä ehtolauseista:

        jos $a=1 niin   $b=2;  -- jos a:n arvo on 1, niin $b:lle arvo 2 
                 muuten $b=3;  -- muuten $b:lle arvo 3 
         

jos $a=1 niin << -- jos a=1 niin $b=2; -- b:lle arvo 2 ja $c=4; -- c:lle arvo 4 >> muuten $b=3;

jos $a=1 niin << $b=2; $c=4; >> muuten << $b=3; $c=5; >>

jos $a=1 niin << $b=2; jos $d=100 niin $b=99; $c=4; >> muuten << $b=3; jos $d=100 niin $b=98; $c=5; >>

3.7 Toistolause (jokaiselle-seuraava, toisto_alkaa/loppuu, toisto_loppu)

        Syntaksi:       jokaiselle lauseet seuraava 

Palautusarvo: -

Syntaksi: toisto_alkaa lauseet toisto_loppuu

Palautusarvo: -

Syntaksi: toisto_loppu

Palautusarvo: -

Rajoitus: jokaisella - seuraava rakenne voi sisältää vain yhden select-lauseen. Sisäkkäisesti voi olla vaikka miten monta jokaisella-seuraava rakennetta ja niissä kussakin oma select-lause. Tämä rajoitus johtuu siitä, että kullekin tasolle voi kiinnittää vain yhden avoimen tiwtokannan kursorin.

Sanojen "jokaiselle" ja "seuraava" välissä olevia lauseita suoritetaan toistuvasti kunnes joko suoritetaan lause toisto_loppu tai sellainen select-lauseke, joka ei palauta enää tietoja (tai palauttaa virheen). Tällöin ns. toisto asetetaan päältä pois, mutta kaikki loput lauseet ko. toisto rakenteessa suoritetaan. Jos haluaa, ettei suoriteta, tulee ko. toisto_loppu asetus olla viimeinen suoritettava lause. Tämän jälkeen jatketaan sanaa "seuraava" seuraavasta lauseesta.

Esim: Haetaan tietoja toistuvasti kannasta niin kauan kuin tietoja riittää.

        $lkm = 1; 
        jokaiselle 
                -- haetaan taulusta Henkilo seuraava 20-vuotias 
                $nimi,$ika = select Nimi,Ika from Henkilo where Ika=20 endsql; 
                -- seuraavaa ei tehdä, jos tietoja ei enää löydy 
                $lkm=$lkm+1; 
        seuraava; 
        -- tulostetaan montako löytyi 
        tulosta "Löytyi:",$lkm," henkilöä ^J"; 
        -- muuttujassa $nimi ja $ika ovat viimeisen onnistuneen select:n  
        -- palauttamat arvot 

Esim: Toistetaan lauseita 10 kertaa:

$lkm = 1; jokaiselle $lkm=$lkm+1; jos $lkm>=10 niin toisto_loppu; --jatketaan tulostuksesta muuten << $a = $a+$lkm; $c=$c+1; >> seuraava; tulosta a$; $lkm = 1; toisto_alkaa $lkm=$lkm+1; jos $lkm>=10 niin toisto_loppu; --jatketaan tulostuksesta muuten << $a = $a+$lkm; $c=$c+1; >> toisto_loppuu; tulosta a$;

3.8 SQL-lausekkeet (select-endsql, sql-endsql, sql_date)

3.8.1 Select-lauseke

        Syntaksi:       select merkkijono endsql; 

Palautusarvo: pyydettyjen sarakkeiden arvot

Select-lauseke on muotoa select select-lause endsql;. Lause noudattaa SQL:n select-lauseen syntaksia lukuunottamatta lopussa olevaa varattua sanaa endsql. Lause annetaan SQL:lle suoritettavaksi sellaisenaan kuitenkin siten, että ensin muuttujat korvataan niiden arvoilla ja funktio sql_date käsitellään.

Funktio sql_date on muotoa sql_date('pp.kk.vvvv'), missä päivämäärän on oltava muodossa pp.kk.vvvv. Sql_date voi olla muotoa sql_date('vvvvkkpp'), missä päivämäärän on oltava muodossa vvvvkkpp.

Järjestelmä muuttaa päivämäärän SQL:n vaatimaan esitysmuotoon.

Jos select palauttaa useamman sarakkeen arvon kuin mitä sijoitettavia muuttujia on, hylätään ylimääräiset arvot. Jos arvoja taas on vähemmän kuin muuttujia, sijoitetaan ylimääräisiin muuttujiin tyhjä merkkijono (null).

Jos select-lauseke esiintyy toistolauseessa ja tietoja ei enää löydy, niin toisto päättyy eikä muuttujien arvoihin kosketa. Jos select-lauseke esiintyy toistolauseen ulkopuolella ja tietoja ei löydy lainkaan, niin muuttujien arvoihin sijoitetaan null.

        Esim: Haetaan taulusta Henkilo ensimmäinen rivi, jossa Ika on 
              20 ja palautetaan C-kieliselle ohjelmalle sarakkeiden  
              HenkNro, HenkNim ja Ika arvot. 
         
              $nro,$nimi,$ika = select HenkNro,HenkNim,Ika from Henkilo 
                                where Ika = 20 endsql; 
              palauta  $nro,$nimi,$ika; 

Esim: Haetaan taulusta Henkilo kaikki rivit, joissa Ika on 20 ja palautetaan C-kieliselle ohjelmalle sarakkeiden HenkNro, HenkNim ja Ika arvot. $vaatimus=20; jokaiselle $nro,$nimi,$ika = select HenkNro,HenkNim,Ika from Henkilo where Ika = $vaatimus endsql; -- palautetaan arvot C-kieleen -- tätä palautusriviä ei tehdä, jos tietoja ei enää ole palauta $nro,$ika,$nimi; seuraava; -- muuttujissa viimeisen rivin tiedot

Esim: Haetaan taulusta Henkilo kaikki rivit, joissa SyntAik on 28.2.1961 ja palautetaan C-kieliselle ohjelmalle sarakkeiden HenkNro, HenkNim ja Ika arvot. $vaatimus="28.02.1961"; --$vaatimus="19610228"; -- olisi myös kelvollinen pvm:n esitystapa jokaiselle $nro,$nimi,$ika = select HenkNro,HenkNim,Ika from Henkilo where SyntAik = sql_date('$vaatimus') endsql; palauta $nro,$ika,$nimi; seuraava;

Huom: Katso myös yhteys-funktiot (3.8.4).

3.8.2 SQL-lauseke

        Syntaksi:       sql merkkijono endsql; 

Palautusarvo: suoritettujen sql-rivien lukumäärä

Sql-lauseke on muotoa sql sql-lause endsql;. SQL-lause on mikä tahansa sql-lause paitsi select (kts. 3.8.1 Select-lauseke). Lause annetaan SQL:lle suoritettavaksi sellaisenaan kuitenkin siten, että ensin muuttujat korvataan niiden arvoilla ja funktio sql_date käsitellään.

Funktio sql_date on muotoa sql_date('pp.kk.vvvv'), missä päivämäärän on oltava muodossa pp.kk.vvvv. Järjestelmä muuttaa päivämäärän SQL:n vaatimaan esitysmuotoon.

SQL-lauseke palauttaa niiden rivien lukumäärän, jolle sql-lause on suoritettu.

        Esim: Suoritetaan commit: 

$lkm = sql commit endsql;

Esim: Suoritetaan päivitys:

$lkm=sql UPDATE Henkilo SET SyntAik=sql_date('01.01.1960') WHERE HenkNro=2 endsql; tulosta "Update:", $lkm,"^J"; -- päivitettyjen lukumäärä

Huom: Katso myös yhteys-funktiot (3.8.4).

3.8.3 sql_date

        Syntaksi:       sql_date(lauseke) 

Palautusarvo: Merkkijono, joka esittää merkkijonon lauseke halutussa sql:n muodossa

Funktio sql_date on muotoa sql_date("pp.kk.vvvv"), missä päivämäärän on oltava muodossa pp.kk.vvvv. Sql_date voi olla muotoa sql_date("vvvvkkpp"), missä päivämäärän on oltava muodossa vvvvkkpp.

Järjestelmä muuttaa päivämäärän SQL:n vaatimaan esitysmuotoon.

        Esim.  $a = sql_date("20.12.1993"); 
               $a = sql_date("19931220"); 
                -- palauttaa muuttujan a arvoksi ORACLE:ssa 
                -- to_date('19931220','yyyymmdd') 
                -- palauttaa muuttujan a arvoksi INGRES:ssä 
                -- date('19931220') 

3.8.4 yhteys_avaa yhteys_vaihda yhteys_sulje

        Syntaksi:       yhteys_avaa(lauseke) 
                        yhteys_vaihda(lauseke) 
                        yhteys_sulje(lauseke) 

Palautusarvo: Palauttaa 0, jos funktion suoritus epäonnistui.

Ns. pääyhteys kantaan täytyy avata ennen K:n suoritusta ja asettaa käyttäjätunnukset kantaan funktiolla K_set_user. Katso kappale 5. Pääyhteyden id on 1.

Ko. funktioilla voidaan tehostaa SQL-kantojen käyttöä, koska voidaan avata useampi yhteys kantoihin. Esim. toinen yhteys lukee kantaa ja toinen yhteys päivittää kantaa.

        Esim. 
                $paivitys=2; -- yhteys kaksi päivitystä varten 
                             -- pääyhteys on 1 
                $ok=yhteys_avaa($paivitys); 
                jos $ok = 0 niin << -- ei onnistu ??? 
                                keskeytä; 
                                >> 
                $ok=yhteys_vaihda(1); 
                jokaiselle 
                        $nro = select nro from henkilo endsql; 
                        jos $nro>0 niin << 
                                $ok=yhteys_vaihda($paivitys); 
                                $ok=sql insert into loytyi values('$nro') 
                                        endsql; 
                                $ok=yhteys_vaihda(1); 
                                >> 
                seuraava; 
                $ok=yhteys_sulje($paivitys); 
                lopeta; 

3.8.5 SQL-seuranta (debug)

SQL-komentoja voi jäljittää erikseen. Sitä varten K-kielessä on kaksi muuttujaa $sql_debug ja $sql_debug_file. Asettamalla $sql_debug="K", niin kaikki suoritettavat sql-lauseet kirjoitetaan muuttujan $sql_debug_file arvon mukaiseen tiedostoon. Oletus on /tmp/ksql.dbg

                Esim. 
                        $sql_debug="K"; 
                        $sql_debug_file="/tmp/1.sql"; 
                        $arvo=select .... endsql; 
                        $sql_debug="E"; 
                         

3.9 Merkkijonofunktiot

3.9.1 Merkkijonon liittäminen (::)

        Syntaksi:       lauseke1 :: lauseke2 

Palautusarvo: Merkkijono, jossa lauseke1 ja lauseke2 yhdessä

Kaksi merkkijonoa liitetään yhteen operaattorilla ::.

        Esim: 
                $c=100; 
                $a="tänään on " :: $pp :: "." :: $kk :: "." :: $vu :: " päivä"; 
                $a="123" :: "456" :: (1+2*$c); 
                -- 123456201 
                -- Huom: 1+2*100 = 201 

3.9.2 Merkkijonon osajono (osajono)

Syntaksi: osajono(lauseke,lauseke1,lauseke2)

Palautusarvo: lausekkeen osajono alkaen merkistä lauseke1 ja mukaan otetaan lauseke2 verran merkkejä. Jos ei löydy merkkejä haluttua määrää, niin vastaus on sen verran sitten lyhyempi ja jos esim. merkkijono on vain 4 merkkiä pitkä ja yritetään ottaa osajono alkaen vaikka 7:stä merkistä, niin palautus arvo on tyhjämerkkijono eli null.

Alkuindeksi alkaa 1:stä.

        Esim: Otetaan merkkijonosta alken 4:stä merkistä 5 merkkiä: 

$b=osajono("123456789",4,5); -- b=45678

3.9.3 Merkkijonon pituus (pituus)

        Syntaksi:       pituus(lauseke) 

Palautusarvo: lausekkeen tuloksen pituus merkkeinä

        Esim:  $pit = pituus("123456789");      -- palauttaa arvon 9 

3.9.4 Merkkijonon esitysmuoto (muoto)

        Syntaksi:       muoto(lauseke,esitysmuoto) 

Palautusarvo: lausekkeen arvo esitysmuodon mukaisessa muodossa

Esitysmuoto esitetään kuten C-kielessä printf-funktion esitysmuoto. Esitysmuodon rakenne:

TUNNISTE TASAUS LEVEYS TYYPPI

TUNNISTE on aina %-merkki

TASAUS - vasempaan reunaan tasattu ja + oikeaan reunaan tasattu, oletusarvona aina tasattu oikeaan reunaan. Tasaus-merkki voi puuttua.

LEVEYS montako merkkiä pitkäksi lavennetaan tuloste. oletusarvoisesti täytetään etutyhjeillä. Kts. edellä TASAUS. Reaaliluvuilla leveys annetaan kahtena lukuna pisteellä erotettuna. Ensimmäinen luku määrittelee leveyden ja toinen luku desimaalien lukumäärän. Leveyden määritys voi puuttua, jolloin muotoillaan sellaisenaan eli ei tapahdu muutosta.

TYYPPI Määrittelee muotoiltavan arvon tyypin: f reaaliluku ld kokonaisluku s merkkijono

Esitysmuodossa voi olla myös vakio-osia.

        Esim: 
                $a = muoto("123.3333","%10.1f"); -- 10 mittaisena, 1 desimaali 
                $a = muoto("123.3333","%d");     -- kokonaislukuna, tasaus oik. 
                $a = muoto("123.3333","%10f");   -- 10 mittaisena, tasaus oik. 
                $a = muoto("123.3333","%-10f");  -- 10 mittaisena, tasattu  
                                                 -- vasempaan laitaan 
                $a = muoto("KALLE","%-s MATTINEN"); -- KALLE MATTINEN 
                $a = muoto("KALLE","%+30s MATTINEN"); -- KALLE MATTINEN, oik.30 

3.9.5 Arvon muuttaminen ASCII-merkiksi merkki (lauseke)

        Syntaksi:       merkki(lauseke) 

Palautusarvo: lausekkeen arvo ASCII merkkinä.

        Esim. laitetaan merkkijonoon tyhje eli ascii 32 desimaalilukuna: 
                $a = "ALKU" :: merkki(32) :: "LOPPU" ; 
                -- tuloksena merkkijono ALKU LOPPU erotettuna tyhjeellä 

3.9.6 Merkkijonon etsintä toisesta merkkijonosta (etsi)

        Syntaksi:       etsi(etsittava,jono) 

Palautusarvo: palauttaa 0, jos etsittävää merkkijonoa ei löydy jonosta. Jos löytyy, palauttaa indeksin eli kohdan merkkijonosta, josta etsittävä merkkijono alkaa. Indeksointi alkaa ykkösestä.

Esim: Onko merkkijono "456" merkkijonossa "1234567890"

              $paikka=etsi("456","123456789");  
              -- paikan arvo on 4, josta kohden löytyy merkkijono 456 

3.9.7 Merkkijonon etsintä ja korvaus toisesta merkkijonosta (etsi_ja_korvaa)

        Syntaksi:       etsi_ja_korvaa(uusiarvo,etsittava,jono) 

Palautusarvo: palauttaa jonon siten, että etsittava merkkijono on korvattu jonolla uusiarvo. Jos ei ole, palauttaa jonon arvon muuttumattomana.

Korvaa merkkijonosta jokaisen merkkijonon etsittava arvon merkkijonolla uusiaarvo.

Esim: Korvataan merkkijono "BCD" merkkijonolla "_bcd_".

              $jono="Merkkijono ABCDE ja ABCDE "; 
              $jono=etsi_ja_korvaa("_bcd_","BCD",$jono); 
              -- jonon uusi arvo on 
              -- Merkkijono A_bcd_E ja A_bcd_E  

3.9.10 Kentän arvon lukeminen merkkijonosta kentta()

        Syntaksi:       $arvo = kentta(merkkijono_lauseke,kenttanumero,erotin) 

Palautusarvo: lausekkeen arvo ASCII merkkinä. Toiminto: palautetaan merkkijonosta kenttänumeron osoittaman kentän arvon. Kenttäerotin voi olla mikä tahansa merkki.

Esim: Olkoon merkkijonon $jono arvona "123,AAA,BBB,CCCC".

                $k1 = kentta($jono,1,",");  -- kenttä 1, erotin on pilkku 
                -- $k1 = 123 
                $k2 = kentta($jono,2,",");  -- kenttä 2 
                -- $k2 = AAA 
                $k5 = kentta($jono,5,",");  -- kenttä 5 
                -- $k5 = null !!! 

3.9.11 Ympäristömuuttujan arvon luku ymp_muuttuja()

        Syntaksi:       $arvo = ymp_muuttuja(lauseke) 

Palautusarvo: lausekkeen arvo ASCII merkkinä. Toiminto: Palautetaan käyttöjärjestelmän ympäristömuuttuja. Funktion parametrinä oleva lauseke on luettavan ympäristömuuttujan nimi ILMAN $-merkkiä.

Esim: $kotihakemisto = ymp_muuttuja("HOME");

3.9.12 Merkkijonon luku käyttäjältä luejono()

        Syntaksi:       $arvo = luejono(lauseke) 

Palautusarvo: käyttäjän antama merkkijono. Toiminto: Luetaan käyttäjältä syöte kysymyksellä lauseke.

Esim: $kuka_olet = luejono("Kuka olet:");

3.10 Päivämääräfunktiot

3.10.1 Esitysmuodon muutos (pvm_muutos)

        Syntaksi:       pvm_muutos(lauseke,muoto1, muoto2) 

Palautusarvo: lauseke, joka esitysmuotoa muoto1, muutettuna esitysmuotoon muoto2

Esitysmuotoja ovat:

                pp.kk.vvvv 
                pp.kk.vv 
                vvvvkkpp 
                vvkkpp 
                sql     (käytettävän tietokantajärjestelmän käyttämä muoto,  
                        K-kieli tuntee eri tietokantajärjestelmienn käyttämät 
                        sisäiset esitysmuodot eli nk. dbo-muodot) 

Esim: Muutetaan pvm sql:n vaatimaan muotoon:

                $sqlpvm = pvm_muutos("20.03.1992","pp.kk.vvvv","sql"); 

3.10.2 Päivämäärien erotus (pvm_ero)

        Syntaksi:       pvm_ero(lauseke1, lauseke2) 
                        -lausekkeiden 1 ja 2 oltava esitysmuodossa vvvvkkpp 

Palautusarvo: palauttaa päivämäärien lauseke1 ja lauseke2 erotuksen

Esim: $ero = pvm_ero("19920610","19920601"); -- ero on 9 päivää

3.10.3 Päivämäärän arvon kasvatus/vähennys (pvm_kasvatus)

        Syntaksi:       pvm_kasvatus(lauseke,lauseke2) 

Toiminto: päivämäärälausekkeeseen lisätään lauseke2 verran päiviä. Lauseke oltava muotoa vvvvkkpp. Lauseke2 oltava kokonaisluku.

Palautusarvo: uusi päivämäärä muodossa vvvvkkpp

Esim: Kasvatetaan pvm kahdella ja pienennetään kahdella:

$uusi = pvm_kasvatus("19920530",2); -- 19920601 $uusi = pvm_kasvatus("19920530",-2); -- 19920528

3.10.4 Nykyinen päivämäärä (tanaan)

        Syntaksi:       tanaan 

Palautusarvo: nykyinen pvm esitysmuodossa vvvvkkpp

Esim: $pvm = tanaan;

3.10.5 Kellonaika (hhmmss)

        Syntaksi:       klo 

Palautusarvo: kellonaika esitysmuodossa hhmmss

Esim: $klo_nyt = klo;

3.11 Arvojen palautus C-kieleen (palauta)

        Syntaksi:       palauta lauseke   
                     tai 
                        palauta lauseke,lauseke,... 

Toiminto: Palauttaa C-kieleen lausekkeiden arvon (itse asiassa laittaa arvot erityiseen palautuslistaan). Palautusarvo: -

Lause ei päätä K-kielisen ohjelman toimintaa. Ohjelma voi sisältää useita palauta-lauseita ja lisäksi lause voidaan suorittaa toiston sisällä useasti.

        Esim:   palauta $a; 
                palauta $a,"CPU JA"::" KaTi,(100*$c); 
                palauta pvm_muutos(tanaan,"vvvvkkpp",pp.kk.vv); 

Luvussa 6 kuvataan miten palautettavat arvot saadaan talteen C-kielisen ohjelman puolella.

3.12 Tulostus

3.12.1 Tulostus (tulosta) (ruudulle)

        Syntaksi:       tulosta lauseke   
                        ruudulle lauseke   
                     tai 
                        tulosta lauseke,lauseke,... 
                        ruudulle lauseke,lauseke,... 

Toiminto: tulostaa lausekkeiden arvot . Kontrollimerkit (ascii 1-32) voidaan tulostaa laittamalla ^ merkki ennen vastaavaa kontrollikirjainta.Esim. ctrl-j (ascii 10) tulostetaan merkkijonona ^J. Merkki ^ voidaan tulostaa laittamalla kaksi ^-merkkiä peräkkäin.

Kun tulostustiedosto on "ruutu" (Kts. 3.12.2), joka on tulostuksen oletusarvo, suoritetaan automaattisesti puskurin tyhjennys aina tulosta-lauseen jälkeen. Tällöin on mahdollista tulostaa vaikka yksi merkki, joka tulee heti näyttöön (ei tarvita rivinvaihtoa tehdä). Toisin sanoen tulostusta ei puskuroida.

Ruudulle funktio tulostaa aina tulostiedostoon "ruutu", jolloin tulosta funktio voi kirjoittaa yhtä aikaa muuhun tiedostoon.

Käyttämällä kontrollimerkkejä, saadaan aikaiseksi tehokkaita tulosteita esim. massa-ajoissa.

Erikoismerkkejä: ^H kohdistin yksi vasemmalle ^M kohdistin rivin alkuun ^J rivin vaihto Palautusarvo: -

Esim: tulosta $a; tulosta $a,"CPU JA"::" KaTi,(100*$c); tulosta "MERKKIJONO ^J"; -- merkkijono ja rivinvaihto

3.12.2 Tulostus tiedosto (tulostustiedosto)

        Syntaksi:       tulostustiedosto(tiednimi) 

Toiminto: Asettaa tulosta-lauseketta varten tulostuksen kohteen. Oletusarvoisesti kohde on "ruutu" eli ns. stdoutput, mutta se voidaan muuttaa joksikin tiedostoksi, johon käyttäjällä on oikeus kirjoittaa. Jos tiedoston nimeksi annetaan "ruutu", niin silloin tulosta-lauseke tulostaa käyttäjän näytölle (stdoutput). Jos tiedosto on jo olemassa, kirjoitetaan sen perään tuhoamatta entistä sisältöä.

Palautusarvo: palauttaa 0, jos ei onnistu tiedoston avaus.

Huom: Kun on asetettu tulostustiedosto, on se auki, kunnes lopetetaan K:ta kutsuvan ohjelman suoritus tai asetetaan tulostustiedostoksi "ruutu".

        Esim:   tulosta $a;             -- tulostaa näyttöön (oletusarvo) 
                $ok=tulostustiedosto("/tmp/puppu.tmp"); 
                -- tulostetaan ko. tiedoston /tmp/puppu.tmp perään 
                tulosta $a,"CPU JA"::" KaTi,(100*$c); 
                tulosta "MERKKIJONO ^J";        -- merkkijono ja rivinvaihto 
                -- 
                $ok=tulostustiedosto("ruutu"); 
                tulosta "LOPPU";                -- tulostui taas näyttöön 

3.13 Muita funktioita

3.13.1 K-kielen versionumero (versio)

        Syntaksi:       versio 

Palautusarvo: K-kielen versionumero merkkijonona

Esim: $versionr = versio;

3.13.2 Tarkistusluvun laskenta (viite, korttinumero)

        Syntaksi:       crc(maski,nrojono) 

Palautusarvo: nrojono:lle tarkistusluku

Esim: $tarkmerkki = crc("731","5555"); /* viite */ Esim: $tarkmerkki = crc("21","5555"); /* korttinumero, tilinumero */

3.14 Keskeyttäminen (keskeyta)

Syntaksi: keskeyta

Toiminto: lopetetaan K-ohjelman suoritus kesken

Palautusarvo: -

3.15 Lopettaminen (lopeta)

Syntaksi: lopeta

Toiminto: lauseella merkitaan K-kielisen ohjelman loppu, lauseen suorittaminen aiheuttaa K-kielisen ohjelman suorittamisen päättymisen

Palautusarvo: -

3.16 Parametrien välitys C-kielestä K-kieleen

C-kielinen ohjelma välittää parametreja K-kieliselle ohjelmalle muuttujissa, joita käsitellään kuten mitä tahansa muuttujia. C-kielinen ohjelma määrää sen, minkä nimisissä muuttujissa parametrit välitetään.

        Esim: K-kielinen ohjelma saa parametrina henkilönumeron muuttujassa 
              $HenkNro ja palauttaa C-kieleen henkilön nimen, joka löytyy 
              Henkilo-taulusta: 

$nimi = select Nimi from Henkilo where HenkNro = $HenkNro endsql;

jos $nimi <> null niin << palauta 'OK', $nimi keskeyta; >> palauta 'VIRHE'; lopeta;

Parametrien käsittelyä C-kielisessä ohjelmassa käsitellään luvussa 6.

3.17 Systeemikomento systeemikomento(lauseke)

        Syntaksi:       systeemikomento(lauseke) 

Toiminto: Suoritetaan käyttöjärjestelmän systeemikomento, joka annetaan funktiolle lausekkeena.

Palautusarvo: palauttaa systeemikomennon palautusarvon numeerisena.

Esim: $lopetus_koodi = systeemikomento("ls -l");

3.18 Tiedostoon kirjoitus tiedostoon(tiednimi,lauseke)

        Syntaksi:       tiedostoon(tiednimi,lauseke) 

Toiminto: Kirjoitetaan tiedoston tiednimi loppuun lauseke. Tiedostoa ei tarvitse avata ja sulkea erikseen. Tiedosto avataan aina perään kirjoitukselle ja suljetaan kirjoituksen jälkeen.

Palautusarvo: palauttaa 0, jos ei onnistu kirjoitus.

Esim: $lopetus_koodi = tiedostoon("malli.txt",$txt);

3.19 Tiedostosta luku tiedostosta(tiednimi)

        Syntaksi:       tiedostosta(tiednimi) 

Toiminto: Lukee tiedostosta tiednimi yhden rivin. Tiedostoa ei tarvitse erikseen avata vaan ensimmäisellä luku kerralla avataan tiedosto automaattisesti ja kun tiedoston loppu saavutetaan, niin suljetaan myös automaattisesti. Tiedosto tarvitsee erikseen sulkea vain, jos luku keskeytetään. Kts. kohta 3.20.

Palautusarvo: palauttaa luetun merkkijonon tai EOF merkkijonon, jos tiedoston luku ei onnistu tai tiedosto loppui.

3.20 Tiedoston sulkeminen sulje_tiedosto(tiednimi)

        Syntaksi:       sulje_tiedosto(tiednimi) 

Toiminto: Sulkee tiedoston tiednimi.

Palautusarvo: palauttaa 0, jos sulkeminen ei onnistunut.

Esim: $ok=sulje_tiedosto("xxxx.txt");

3.21 Aliohjelman suoritus aliohjelma(aliohjelman nimi)

        Syntaksi:       aliohjelma(tiednimi) 

Toiminto: Suoritetaan tiedostossa tiednimi oleva K-kielinen ohjelma.

Palautusarvo: palauttaa 0, jos ei onnistu suoritus.

Esim: $lopetus_koodi = aliohjelma("malli.k");

Symbolitaulu on kaikille K-ohjelmille yhteinen eli parametrien välitys on mahdollista muuttujien avulla.

3.22 Listat

K-kielessä on listatietorakenne, jonne voi kirjoittaa, lukea, muuttaa, poistaa ja etsiä tietoja. Listaan voidaan tieto lukea myös tiedostosta. Lista on joukko tietorivejä, joissa useita sarakkeita. Sarakkeiden ja rivien määrää ei ole rajoitettu. Ainoana rajoittavana tekijänä on koneen keskumuisti, sillä koko lista on muistissa. K:n listat ovat siis dynaamisia moniulotteisia taulukoita.

HA listan rakenne

3.22.1 Listan rakenne

sarake1/kenttä1 sarake2/kenttä2 .... +--------------------+--------------------+-----------+---------+ rivi 1 ! ! ! ! ! +--------------------+--------------------+-----------+---------+ rivi 2 ! ! ! ! ! +--------------------+--------------------+-----------+---------+ ... ! ! ! ! ! +--------------------+--------------------+-----------+---------+ rivi n ! ! ! ! ! +--------------------+--------------------+-----------+---------+

3.22.2 Listan luonti lista_luo(nimi , sarakkeiden määrä)

        Syntaksi:       lista_luo(nimi, sarakkeiden lukumäärä) 

Toiminto: Lista pitää luoda ennenkuin sitä voidaan käyttää.

Palautusarvo: palauttaa 0, jos ei onnistu listan luonti. Syynä joko, että lista on jo olemassa tai muisti loppunut.

Esim: $ok = luo_lista("HENK",3); -- henkilöillä 3 kenttää

3.22.3 Listan luku tiedostosta lista_lue()

        Syntaksi:       lista_lue(nimi, tiedostonimi, sarakkeiden lukumäärä, 
                                  kenttäerotin) 

Toiminto: Luetaan lista tiedostosta. Tiedostossa erottimena kenttäerotin. Tiedostosta luetaan sarakkeiden lukumäärän verran sarakkeita. Lista pitää olla luotuna ennen lukua.

Palautusarvo: palauttaa aina <> 0.

Esim: $ok = luo_lista("HENK",3); -- henkilöillä 3 kenttää

-- luetaan tiedostosta henk.txt 2 saraketta, kun -- sarakkeet erotettu pilkuilla $ok = lista_lue("HENK","henk.txt",2,",");

3.22.4 Listan selaus lista_selaa(nimi , suunta )

        Syntaksi:       lista_selaa(nimi, suunta ) 

Toiminto: Muutetaan listan käsittelykohtaa. Suunta voi olla ens haetaan listan ensimmäinen rivi viim haetaan listan viimeinen rivi edell haetaan listan edellinen rivi seur haetaan listan seuraava rivi

Palautusarvo: Palauttaa 0, jos ko. toimintoa ei voi tehdä (listan loppu saavutettu ko. suuntaan selattaessa.

Esim: Listan läpikäynti.

-- haetaan ensimmäinen $ok = lista_selaa("HENK",ens); jokaiselle jos $ok <> 0 niin << -- listassa on jotain tulosta lista_kentta_lue("OMA",1),"^J"; -- haetaan seuraava $ok = lista_selaa("HENK",seur); >> muuten toisto_loppu; seuraava;

3.22.5 Listasta rivin etsiminen arvolla lista_etsi()

        Syntaksi:       lista_etsi(nimi, etsittävä_arvo, sarake ) 

Toiminto: Etsitään listasta sarakkeesta sarake arvolla etsittävä_arvo.

Palautusarvo: Palauttaa 0, jos ko. sarakkeesta ei löydy ko. etsittävällä arvolla.

Esim: -- etsitään sarakkeesta yksi, arvoa Jussi $ok = lista_etsi("HENK","Jussi",1); jos $ok<>0 niin tulosta "oli se";

3.22.6 Rivin lisäys listaan lista_rivi_uusi( nimi )

        Syntaksi:       lista_rivi_uusi(nimi) 

Toiminto: Lisätään yksi rivi listaan nykyisen rivin jälkeen.

Palautusarvo: Palauttaa aina <> 0.

Esim: $ok= lista_rivi_uusi("HENK");

3.22.7 Rivin poisto listasta lista_rivi_pois()

        Syntaksi:       lista_rivi_pois(nimi , poistettava) 

Toiminto: Poistetaan listasta joko nykyinen rivi tai kaikki rivit.

Palautusarvo: Palauttaa aina <> 0.

Esim: -- poistetaan ens. rivi $ok= lista_selaa("HENK",ens); $ok= lista_rivi_pois("HENK",nykyinen); -- poistetaan kaikki rivit $ok= lista_rivi_pois("HENK",kaikki);

3.22.8 Listarivin kentän arvon luku lista_kentta_lue()

        Syntaksi:       lista_kentta_lue(nimi , kenttänumero) 

Toiminto: Luetaan listan nykyisen rivin n:s kenttä.

Palautusarvo: Palauttaa aina kentän arvon, jos kenttä puuttuu, niin palauttaa null:n.

Esim: $nro = lista_kentta_lue("HENK",1); $nimi= lista_kentta_lue("HENK",2);

3.22.9 Listarivin kentän arvon muutos lista_kentta_aseta()

        Syntaksi:       lista_kentta_aseta(nimi , kenttänumero, arvo) 

Toiminto: Muutetaan listan nykyisen rivin n:s kenttä.

Palautusarvo: Palauttaa aina <> 0.

Esim: $nimi="CPU"; $nro =1002; $ok= lista_kentta_aseta("HENK",1,"1002"); $ok= lista_kentta_aseta("HENK",2,"Nimi"); $ok= lista_kentta_aseta("HENK",1,$nro); $ok= lista_kentta_aseta("HENK",2,$nimi);

3.23 CGI-liittymä

CGI-liittymä on menetelmä, jolla WEB-palveluiden sivuille luodaan dynaamisia sivuja. Koska K-kielessä on jo systeemikutsu, ympäristömuuttujat, niin CGI-suodattimena K-kieli on näppärä, kun tähän lisätään vielä SQL-palvelut.

Kun käytetään SQL-kantoja, vaativat ne yleensä joidenkin ympäristömuuttujien olemassaoloa. HTTP-palvelimessa suoritettaessa CGI-ohjelmaa, ei käyttöjärjestelmän ympäristömuuttujat näy. Tämän takia on K-kieleen rakennettu konfigurointi tiedosto, joka luetaan ja sen perusteella asetetaan tarvittavat ympäristömuuttujat ja kannan käyttäjätunnukset. Määritys tulee tehdä tiedostoon nimeltä kcgi.def hakemistoon $DOCUMENT_ROOT (kts. HTTP-palvelijan määrittelyistä). Ko. tiedostoon määrittelykirjoitetaan seuraavaan tapaan:

                HOME=/u/home/visitor 
                ORACLE_SID=kdb 
                ORACLE_HOME=/opt/local/db/oracle 

Esim. kora.cgi vaatii edellä mainitut määritykset. $HOME hakemistossa tulee olla .hevitmp -tiedosto, jossa on käyttäjätunnukset kantaan Kati:n määritysten mukaisesti.

3.23.1 CGI-parametrien luku listaan CGI_lue( muuttuja_lista, ymparisto_lista )

        Syntaksi:       CGI_lue(muuttuja_lista, ymparisto_lista) 

Toiminto: Luetaan listaan muuttuja_lista, joko POST metodissa CONTENT_FILE:stä tai GET metodissa QUERY_STRING:stä CGI muuttujat ja arvot. Jos listaa ei ole olemassa, CGI_lue luo sen itse. Listassa tulee olla vähintään kaksi saraketta eli muuttujan nimi sarakkeessa 1 ja muuttujan arvo sarakkeessa 2. Ymparisto_lista listaan luetaan http:n mukaiset ympäristömuuttujat. Jos ko. listan nimeksi annetaan tyhjämerkkijono, niin silloin listaa ei tehdä.

Palautusarvo: palauttaa aina <> 0, jos oli yksikin muuttuja.

Esim: -- luetaan listaan WEBLST muuttujat ja listaan -- ENVLST http-ympäristömuuttujat $ok = CGI_lue("WEBLST","ENVLST"); -- tämän jälkeen listassa käytettävissä -- kaikki listankäsittely toiminnot

3.23.2 CGI-dokumenttijonojen käsittely CGI_kuva( ... )

        Syntaksi:       CGI_kuva( kuvahakemisto, MIME-tyyppi, MIME-alityyppi,  
                                erotinjono, esitystyyppi, jonon/kuvan nimi, 
                                toistokerrat, 
                                odotusaika) 

Toiminto: Tällä toiminnolla voidaan HTML-sivulle liittää yksittäinen dokumentti (HTML, GIF-kuva, ....) tai muodostaa dokumenttisarja. Yhdessä sarjassa voi olla vain yhden tyypin mukaisia dokumentteja. Tämä mahdollistaa tällöin myös animaatioiden teon. Samalla HTML-sivulla voi toimia yhtäaikaa useita animaatioita.

Kuvahakemisto - hakemisto, jossa kuvat sijaitsevat, voi olla suhteellinen tai absoluuttinen hakemisto viittaus suhteessa HTTP:n juureen. MIME-tyyppi - esim. image tai text, oltava määritelty selaajassa. MIME-alityyppi - esim. gif tai html ..., oltava määritelty selaajassa. erotinjono - esim. GIFSeperator, tämä merkkijono tulee dokumenttien väliin. (Boundary). esitystyyppi - joko file tai queue. Jos näytetään yksittäinen dokumentti, niin file, mutta jos näytetään dokumenttisarja, niin queue. Katso seuraava parametri. jonon/dokumentin nimi - jos esitystyyppi on queue, niin silloin tämä tiedosto on dokumentti- jonon kuvaajatiedoston nimi tai jos esitystyyppi on file, niin dokumentin nimi. Tiedosto on sijaittava hakemistossa kuvahakemisto. toistokerrat - monestiko jono/dokumentti toistetaan. Jos arvo < 0, niin käytetään jono- tapauksessa ko. jonon kuvaus tiedostossa olevaa toistomäärää. Jos arvo = 0, niin toistetaan niin kauan kuin sivu on olemassa. Jos > 0, niin toistetaan ko. määrä. Jos tiedosto, niin yleensä 1. odotusaika - montako sekuntia odotetaan jonossa ennen seuraavan näyttämistä. Voi olla 0, jolloin käytetään jonotiedostossa olevia kuvakohtaisia arvoja. Tällä ohjataan animaatioita.

Palautusarvo Ei merkitystä.

Jonotiedoston muoto: Odotustapa;Odotusaika;dokumenttitiedosto; Odotustapa;Odotusaika;dokumenttitiedosto; ... repeat;Toistojen määrä;;; <- voi puuttua * <- kommenntirivi voi olla

Odotustapa S on sleep, jolloin odotusaika on sekuntteja. Osotustapa W on wait, jolloin odotusaika on huomattavasti lyhyempi, mutta kuormittaa HTTP-palvelijaa enemmän.

        Esimerkki: 
                CGI_kuva("/show","image","gif","GIFSeperator","queue", 
                                "esitys.shw",0,0); 

- käynnistetään hakemistosta DOCUMENT_ROOT/show dokumenttijono tiedostosta esitys.shw. Esitys koostuu image/gig tyyppisistä kuvista ja kuvien välissä on --GIFSeperator erotin rivi. Esitys pyörii "ikuisesti" ja käytetään jono-tiedostossa olevia aikaviiveitä.

Jonotiedosto esitys.shw: * esitys.shw, Jukka Inkeri, Awot, 010496 S;0;ok.gif; <- ei odoteta ennen kuvaa yhtään S;20;kuva1.gif; <- odotetaan 20 sekunttia ennen tätä kuvaa W;10;kuva2.gif; <- odotetaan 10 wait-yksikköä, eli vähän W;10;kuva3.gif; <- odotetaan 10 wait-yksikköä, eli vähän W;10;kuva4.gif; <- odotetaan 10 wait-yksikköä, eli vähän repeat;10;; <- ei merkitystä, koska kutsussa pyydetty "ikuisesti"

Esimerkiksi kasc.cgi ja kora.cgi käyttävät kimage.k K-ohjelmaa kuivien esitykseen. Kutsu HTML-sivulla muotoa: (huomaa, että erottimena parametrien välillä / -merkki ja jos halutaan, että parametrissä on mukana / -merkkejä, tulee parametri kehystää sulkuihin merkeillä ( ).

<IMG SRC="/(/show)/image/gif/GIFSeperator/queue/esitys.shw/0/0">

Huom: Kuvat skaalataan ensimmäisen kuvan koon mukaisesti. Jos käytetään HEIGHT ja WIDTH määrityksiä, niin silloin ko. määritysten mukaisesti skaalataan kuvat.

3.23.3 Numerosarjan näyttö bittikuvana CGI_laskuri( arvo, kaanteinen, pituus)

        Syntaksi:       CGI_laskuri( arvo, kaanteinen, pituus ) 

Toiminto: Muuttaa kokonaisluku arvon X-bitmap kuvaksi. Jos kaanteinen on tosi eli <> 0, niin luku tulee mustalla pohjalla, muuten taustavärin mukaisesti. Pituus muuttujalla voidaan määritelklä näytön leveys merkkeinä. Jos arvossa vähemmän merkkejä, niin täytetään etunollilla. Jos pituus on 0, niin näytössä vain arvossa olevien merkkien verran merkkejä.

Palautusarvo: ei merkitystä palautusarvolla.

Esim:

-- näytetään arvo käänteisenä videolla kymmenellä -- numerolla CGI_laskuri(arvo, 1 , 10);

3.24 CGI-ohjelmaesimerkkejä

3.24.1 CGI-muuttujien listaus

                --listataan CGI FORM muuttujat 
                $ok=CGI_lue("WEBLST","ENVLST"); 
                $ok= lista_selaa("WEBLST",ens); 
                jokaiselle 
                  jos $ok <> 0 niin  
                        << -- listassa on jotain 
                        tulosta lista_kentta_lue("WEBLST",1); 
                        tulosta lista_kentta_lue("WEBLST",2); 
                        tulosta "^J"; 
                        -- haetaan seuraava 
                        $ok = lista_selaa("WEBLST",seur); 
                        >> 
                   muuten toisto_loppu; 
                seuraava; 

3.24.2 CGI-kuvaesitys (animaatio)

        --kimage.k 
        -- Karjalan ATK-Awot Oy, Jukka Inkeri, 30.1.96 
        -- käsitellaan image-kuvia 
        $ok=CGI_lue("WEBLST","ENVLST"); 
        -- katsotaan dokumenttien juuri-hakemisto, jossa kuvat ovat jossakin 
        -- hakemistossa 
        $ok=lista_etsi("ENVLST","DOCUMENT_ROOT",1); 
        $polku=lista_kentta_lue("ENVLST",2); 
        $kokopolku=$polku :: "/" :: $PARA1; 
        $ok=CGI_kuva($kokopolku,$PARA2,$PARA3,$PARA4,$PARA5,$PARA6, 
                        $PARA7,$PARA8); 
        lopeta; 

Esimerkkinä kimage.k :n käyttö HTML-sivulla

          <IMG SRC="/cgi-bin/kasc.cgi/kimage.k/(/show)/image/gif/GIFSeperator/ 
                        queue/katso.shw/0/1"> 

        - kimage.k, kuvat hakemistossa /show (suhteessa DOCUMENT_ROOT) 
        - MIME-tyyppi image 
        - MIME-subtype gif 
        - boundary on GIFSeperator 
        - queue = esitysjono 
        - katso.shw esitys löytyy tiedostosta  /show/katso.shw 
        - 0 = suoritetaan ikuisesti 
        - 1 = aikaviive kuvien välillä, jos sitä ei olisi ko. jono tiedostossa 
        - jos tyyppi olisi queue:n sijaan file, niin sitten näytettäisiin 
          vain yksittäinen kuva 

3.24.3 CGI-laskuri (esim. HTML-sivuilla käyneiden lukumäärä)

        --kcounter.k 
        -- Karjalan ATK-Awot Oy, Jukka Inkeri, 9.2.96  
        -- laskurin naytto HTML-sivulle  image/x-bitmap muodossa 
        -- 
        -- PARA1  laskurin nimi esim awot1 
        -- PARA2  0 = ei käänteinen  1 = käänteinen 
        -- PARA3  numeronäytön pituus merkkeinä, 0=luvun mukaan 
        $laskurihak="cnt";              -- hakemisto, jossa laskurit 
        -- haetaan CGI ympäristömuuttujat 
        $ok=CGI_lue("WEBLST","ENVLST"); 
        -- katsotaan missä laskurit 
        $ok=lista_etsi("ENVLST","DOCUMENT_ROOT",1); 
        $polku=lista_kentta_lue("ENVLST",2); 
        -- laskuritiedosto 
        $kokopolku=$polku :: "/" :: $laskurihak :: "/" :: $PARA1;   
        --luetaan ko. laskuri 
        $arvo=tiedostosta($kokopolku); 
        jos $arvo = "EOF" niin $arvo=0; -- puuttui, aloitetaan 0:sta 
        --kasvatetaan laskuria 
        $arvo=$arvo+1; 
        $arvo=muoto($arvo,"%.0f") ;  -- ei desimaaleja 
        --poistetaan ent.arvo 
        $syscmd="/bin/rm -f " :: $kokopolku; 
        $ok=systeemikomento($syscmd); 
        --talteen uusi arvo 
        $ok=tiedostoon($kokopolku,muoto($arvo,"%.0f") :: "^J"); 
        $ok=sulje_tiedosto($kokopolku); 
         
        --tuotetaan bittikuva laskurin arvosta 
        $ok=CGI_laskuri($arvo,$PARA2,$PARA3); 
        lopeta; 

Ko. esimerkki näyttää laskurin nimeltä $PARA1 arvon. Laskuri sijaitsee tiedostossa $DOCUMENT_ROOT/cnt/$PARA1.

Käyttöesimerkki HTML-sivulla:

Kävijöiden määrä 1.1.1996 jälkeen tällä sivulla <IMG SRC="/cgi-bin/kasc.cgi/kcounter.k/awot/1/6> <br>

        - laskuri awot 
        - 1 eli näytetään käänteisenä 
        - 6 mittaisena numerosarjana, täyttö etunollilla 

3.24.4 CGI-tietokannasta haku

        --db_ex.k 
        -- Karjalan ATK-Awot Oy, Jukka Inkeri, 30.1.96 
        -- Esimerkki Oracle/Ingres-kannasta hausta 
        -- Form-lomakkeessa pyydetty käyttäjältä postinumeroa 
        -- alustetaan HTML-sivu 
        $HtmlHead="Kanta testi"; 
        $ok=aliohjelma("htmlbeg.k"); 

-- luetaan parametrit $ok=CGI_lue("WEBLST","ENVLST"); $ok=lista_etsi("WEBLST","teksti",1); -- kentässä teksti postinumero jos $ok = 0 niin << tulosta "Ei ole^J^M"; $ok=aliohjelma("htmlend.k"); keskeyta; >> $ppnro=lista_kentta_lue("WEBLST",2); -- postinumero $ok=aliohjelma("htmlend.k"); jokaiselle $pnro,$tnimi,$lnimi=select kotpostnro, taydnim, lyhnim from henkilo where kotpostnro = $ppnro endsql; jos $pnro <> null niin << tulosta $pnro,$lnimi,$tnimi,"^J^M"; >> seuraava;

tulosta "</PRE>"; -- luodaan loppusivu HTML $ok=aliohjelma("htmlend.k"); lopeta;


Valitse:[Ens.sivu] [Sivun alkuun] [Sisällysluettelo] [Hakemisto] [Seuraava sivu]

© 1992-1996 Karjalan Tietovalta Oy, Karjalan ATK-Awot Oy, Computer Program Unit Oy