[vastaus aiempaan viestiin]
| Kirjoittaja: | Seppo Mustonen |
|---|---|
| Sähköposti: | - |
| Päiväys: | 26.9.2007 15:35 |
Päättelen, että Petri on ohjelmoimassa uutta C-kielistä ohjelmaa
ja haluaa siinä perustaa Survon datatiedostoja.
Normaalissa Survon käytössä tähän riittää FILE CREATE -komento eikä
mitään omaa C-ohjelmointia tarvita.
Niinpä kaikki mitä seuraavassa esitän, koskee vain niitä, jotka
haluavat itse laatia C-kielisiä ohjelmia Survoon.
Survon datatiedoston luonti tapahtuu todella fi_create() -funktiolla
ja pieni esimerkkiohjelma (SURVO MM -ohjelma _FCREATE.EXE), joka
käynnistyisi Survossa komennolla FCREATE, näyttää, miten tämä
tapahtuu.
Koska arvelen, ettei Petrille lopulta riitä pelkkä tyhjän tiedoston
luominen, vaan hän tarvitsee myös keinot tallettaa itse dataa
tuohon tiedostoon, tarkastelen tilannetta, jossa paitsi perustetaan
3 muuttujan tiedosto TEST, siihen talletetaan myös pari havaintoa
niin, että tiedostosta TEST löytyvät FCREATE-komennon jälkeen
seuraavat tiedot:
*FILE DEL TEST
*FCREATE
*FILE LOAD TEST
*DATA TEST*,A,B,C
C Name Height Weight
A John 175 70
B Peter 192 91
Kyseessä ei siis ole mikään yleinen tiedoston luontiin ja tietojen
talletukseen tarkoitettu ohjelma, vaan ainoastaan pieni prototyyppi,
jota on helppo yleistää.
Ohjelman listaus on seuraava:
#include <survo.h>
#include <survoext.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <survodat.h>
SURVO_DATA_FILE dat;
char **specs;
void main(int argc, char *argv[])
{
int i;
double value;
int len=32; // tietueen pituus
int m1=5; // muuttujien maksimimäärä
int m=3; // muuttujien nykyinen määrä
long n=0L; // havaintojen lukumäärä
int f=64; // muuttujan nimen maksimipituus
int extra=7; // muuttujan attribuuttien lukumäärä
int textn=0; // mahdollisten kommenttirivien lukumäärä
int textlen=0; // kommenttirivin pituus
// char *text[]; // osoittimet kommenttiriveille (tässä NULL)
// Muuttujien nimet, pituudet ja attribuutit:
// Ensimmäinen on 16 tavun merkkijono,
// muut 2 tavun numeerisia muuttujia.
char *varname[]={"Name ","Height ","Weight "};
char *vartype[]={"SA- ","2A- ","2A- "};
int varlen[3]={ 16, 2, 2 };
s_init(argv[1]);
// Tiedoston perustaminen
fi_create("TEST",len,m1,m,n,f,extra,textn,textlen,NULL,
varname,varlen,vartype);
// Tiedosto on luotu.
// Tiedoston avaaminen uusien havaintojen tallettamiseksi
i=fi_open("TEST",&dat);
if (i<0) return;
// Ensimmäisen havainnon talletus
++dat.n; // Lisää havaintojen lukumäärää
fi_alpha_save(&dat,dat.n,0,"John");
value=175.0; fi_save(&dat,dat.n,1,&value);
value=70.0; fi_save(&dat,dat.n,2,&value);
// Toisen havainnon talletus
++dat.n;
fi_alpha_save(&dat,dat.n,0,"Peter");
value=192.0; fi_save(&dat,dat.n,1,&value);
value=91.0; fi_save(&dat,dat.n,2,&value);
// Todellisuudessa havaintoja talletetaan poimimalla
// niitä jostain lähteestä (esim. tekstitiedostosta),
// jolloin edellä olevien erillisten talletuskäskyjen
// sijaan kaikki tapahtuu esim. while-loopissa.
// Havaintojen lukumäärän dat.n talletus tiedostoon
fi_increase_n(&dat,0);
// Tiedosto suljetaan
fi_close(&dat);
sur_print("\nSurvo data file TEST created!"); WAIT;
s_end(argv[1]); // Tämä ei välttämätön, koska mitään ei kirjoiteta
// toimituskenttään.
}
| 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!