Re: Uusi datatiedosto C-ohjelmoinnissa

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

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