[viesti Survo-keskustelupalstalla (2001-2013)]
Kirjoittaja: | Seppo Mustonen |
---|---|
Sähköposti: | - |
Päiväys: | 1.1.2004 0:02 |
Yritän vastata ainakin muutamiin keskustelusäikeissä "FILE RENAME,FILE CHANGE,FILE DROP,FILE EXPAND" ja "LINEDEL rivien valikoituun poistoon" esitettyihin ajatuksiin. Reijon ehdottamista uusista tiedostonhallintakeinoista olen nyt toteuttanut FILE EXPAND:in. FILE EXPAND <data_tiedosto>,m,n kasvattaa tiedoston kapasitettia niin, että maksimaalinen muuttuja- määrä kasvaa luvulla m ja tietueen pituus n tavulla. Aktivoitaessa pelkkä FILE EXPAND <data_tiedosto> valitaan m=m1/4+4 missä m1 on muuttujien tämänhetkinen maksimimäärä ja n=n1/4+20 missä n1 on tämänhetkinen havaintotietueen pituus. Tämä vastaa myös FILE COPY:n oletusasetuksia. FILE EXPAND on ohjelmateknisesti FILE COPY:n kylkiäinen. Se tekee ensin laajennetun tiedoston nimellä SURVO.TMP samaan hakemistoon, missä alkuperäinen tiedosto on. Jos kopiointi onnistuu eli SURVO.TMP mahtuu levylle, alkuperäinen tiedosto hävitetään ja SURVO.TMP muutetaan alkuperäisen nimiseksi. Jos kopiointi ei onnistu, alkuperäinen tiedosto jää entiselleen. Minulla oli aluksi melkoisesti "sisäistä kitkaa" FILE EXPAND:in toteuttamiseen, sillä eihän tällä voiteta muuta kuin se, ettei käyttäjän tarvitse tehdä po. toimenpidettä vaiheittain. Teknisesti datatiedoston suora laajennus (paljon tiedoston osien sisäistä kopiointia) olisi ollut mahdollista mutta "tietoturvan" kannalta hieman vaarallista ja nopeudenkin suhteen kyseenalaista. Kitkaa vähensi kuitenkin hieman se, että negatiivisilla parametreilla m ja n datatiedoston viemää tilaa voi tiivistää, jos on esim. tiedostoa perustaessaan on tullut varanneeksi hiukan liikaa. Varsin hyödyllinen saattaa olla esim. ison datan arkistoinnissa vaihtoehto FILE EXPAND <data>,min,min joka tiivistää tiedoston koon minimiin. Varoitus! FILE EXPAND tulee koekäyttöön versiosta 2.07. Toistaiseksi on tärkeää, että tekee varakopion tiedostostaan, ennenkuin iskee siihen FILE EXPANDilla. FILE EXPAND <data> on varmasti hyvä apu kokemattomille käyttäjille (kun ei tarvitse ajatella mitään). Entinen FILE COPY-käytäntö on kuitenkin suositeltavampi, koska silloin voi antaa tiedoston edellisen version säilyä. En oikein mielly Reijon ajatukseen > Yleisemmin NEWSPACE-täsmennyksen osalta olisi > kätevää pystyä antamaan se pelkkänä muuttujien > lukumääränä (jolloin tarvittavat tavut tulisivat > vaikkapa jotenkin FILE COPYn algoritmia vastaavalla > tavalla). Tarvittavien tavujen laskeminen kun tuntuu > usein ylivoimaiselta tehtävältä ;). Jotta lukija voi ymmärtää kantaani, on hieman selitettävä Survon datatiedoston rakennetta. Siinä on aina etukäteen asetettuna, mikä on suurin mahdollinen muuttujien määrä (m1) ja mikä on suurin mahdollinen yhden havainnon tarvitseman tilan pituus tavuina (n1). Havaintojen lukumäärälle ei sensijaan ole mitään rajoitusta periaatteessa. Kullekin mahdolliselle muuttujalle on varattuna vakiomittainen muuttujan nimeä, tyyppiä, aktivointistatusta ym. vastaava tila aivan tiedoston alussa. Varsinaiset havaintoarvot tulevat tämän listan perässä ja jokaiselle on varattuna tuo n1 tavun tila. Tämä rakenne suo sen huomattavan edun, että Survon datatiedosto on aina ns. suorasaantitiedosto. Kun on kertaalleen lukenut (ohjelmat sen tekevät) tiedoston rakennekuvauksen, on välittömästi laskettavissa, mistä kohtaa tiedostossa alkaa j. havainnon i. muuttujan arvo eikä arvoa tarvitse etsiä esim. selaamalla. Tällainen järjestely takaa mahdollisimman tehokkaan työskentelyn sekä tietoja luettaessa että niitä talletettaessa. Näin pitäisi olla ymmärrettävää, ettei parametreja m1 ja n1 noin vain voi muuttaa kopioimatta tiedostoa tai tekemättä siihen melkoisia sisäisiä muutoksia. m1 ja n1 ovat toisistaan riippumattomia parametreja. Joskus m1/n1 on hyvin suuri (paljon esim. dikotomisia muuttujia) ja joskus m1/n1 on hyvin pieni (paljon pitkiä merkkijonomuuttujia). Niinpä tiedoston kapasiteettia ei voi nostaa vain antamalla yhden luvun eikä Reijon toivomaa NEWSPACE-yksinkertaistusta voi toteuttaa. Muuttujien nimeämiskäytäntö Survossa on sikäli edullinen, että jokaisella muuttujalla on sekä lyhyt (max. 8 merkkiä) kutsumanimi että (kutsumanimen jatkeena) vapaamuotoinen selitysteksti. Koska esim. tulostaulukoissa ja muuttujaluetteloissa pitkät otsikot olisivat hankalia, kutsumanimet ovat tässä tarkoituksessa sekä välttämättömiä että (osuvasti valittuina) hyödyllisiä. Muuttujien valintatilanteissa (esim. FILE ACTIVATE) Survo pitää kuitenkin huolta siitä, että käyttäjät näkevät samassa yhteydessä nimien selitykset ja se helpottaa oikeitten valintojen tekemistä. On erittäin tärkeää, että käyttäjä itse kokee hieman vaivaa hyvien kutsumanimien keksimisessä. Tämähän ei ole mikään jatkuva pohdinnan kohde vaan tulee vastaan jokaisen aineistotyypin kohdalla (korkeintaan) kerran. Saattaa olla erittäin vaikea kehittää mitään hyvää automaattista tapaa luoda kutsumanimiä selitystekstien tai muiden ohjelmien pitkien muuttujanimien avulla. Järkevien lyhennysten teko edellyttää aina sitä, että ymmärtää, mikä on muuttujan todellinen luonne ja merkitys. Usein hyvä lyhenne koostuu aivan eri merkeistä kuin mitä selityksessä esiintyy. Tämä on hiukan samanlainen ongelma kuin roskapostien suodatus, mikä ainakaan oman kokemukseni mukaan näytä vielä onnistuvan juuri lainkaan. Useat Reijon ehdotuksista ovat yhteydessä huomattavan suurten tiedostojen käsittelyyn. Tällöin on tietenkin suotavaa, ettei tarvitsisi vaiheistaa toimenpiteitä, jotka periaatteessa pitäisi pystyä tekemään suoraankin. Käydyn keskustelun perusteella minun on aika vaikea tehdä lisää päätöksiä siitä, mitä muita mahdollisia uusia FILE-komentoja todella tarvitaan. Usein riittää vallan hyvin, että liimataan toimintoja yhteen sukroilla ja käytetään (mm. muuttujaluettelojen muokkaamiseen) Survon editorin suomia keinoja. Juha Valtonenkin puhui jo (22.12.2003) "monipuolisten FILE-toimintojen sillisalatoitumisen" vaarasta. Jatkopäätösten kiteyttämiseksi saattaisi ainakin yksi seminaaritilaisuus po. aiheesta olla paikallaan. Sitten vielä hieman rivien poistosta: Kimmon toivomuksesta olen laajentanut vaihtoehtoa FILEDEL L1,L2,EMPTY / tyhjien rivien poisto väliltä L1-L2 seuraavalla FILEDEL L1,L2,EMPTY,k missä k ei-negatiivinen kokonaisluku (siis 0,1,2,...). Tällöin, kun kohdataan n tyhjän rivin jono ja n on suurempi kuin k, poistetaan vain n-k tyhjää riviä eli jätetään k tyhjän rivin jakso. Jos n on pienempi tai sama kuin k, ei poisteta tältä kohtaa mitään. Esim. arvolla k=1 poistetaan kaikki "ylimääräiset tyhjät". "Omasta toivomuksestani" olen lisännyt pelkistetyn vaihtoehdon LINEDEL / ei siis lainkaan parametreja. Tämä poistaa komentorivin alta kaikki tyhjät rivit ensimmäiseen ei-tyhjään asti. Jos siis seuraava rivi ei ole tyhjä, ei tapahdu mitään muutosta. Yleensäkään puhdas LINEDEL ei voi tuhota mitään olennaista, mutta sillä poistaa peräkkäisiä tyhjiä rivejä aikaisempaa näppärämmin. Onnellista Uutta Vuotta! Seppo
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!