Viimeaikaisista ehdotuksista

[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:
[ei vastauksia]

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.