Druhy a typy údajů FoxPro

 

 

Druhy údajů

            Údaje podle způsobu uložení mohou být druhu:

- konstanta

- paměťová proměnná

- pole

- položka

Konstanta je údaj zapsaný v programu. Zavedení pojmu konstanta si vynutila potřeba odlišit hodnotu údaje od zbylého textu programu. Například znakový řetězec musí být zapisován do uvozovek. Je-li nějaká hodnota uvedena na vstupu nebo výstupu (například na sestavě), pak nejde o konstantu ale o údaj. Je samozřejmé, že hodnota konstanty se v průběhu programu nemění.

Paměťová proměnná (memory variable) je místo v operační paměti počítače, ve kterém je uložen údaj. Je povoleno měnit její typ, obsah i její rozsah (až na nulový), ale toto místo zůstává rezervováno do doby ukončení programu nebo do doby zrušení (release) proměnné. Jméno paměťové proměnné může být tvořeno libovolným počtem písmen, číslic a znaků _. Musí začínat písmenem. Akceptuje se prvních deset znaků jména. Zbývající znaky jsou chápány jako vysvětlující. Pro program jsou nevýznamné. Na velikosti písmen nezáleží, ale nejsou povolena písmena s diakritickými značkami. Doporučuje se, aby nedošlo k záměně jména proměnné se jménem položky, uvádět před jméno předponu (prefix) m nebo M (memory). Předpona se od jména odděluje tečkou. Například: M.PRIJMENI. Typ a rozměr paměťové proměnné se definuje přiřazením hodnoty. Pole (array) je uspořádaná množina prvků - proměnných stejného jména, na které se lze odkazovat numerickým indexem, uzavřeným v hranatých nebo kulatých závorkách. Manipulace se provádí s polem jako celkem i s jeho jednotlivými prvky.

Obdobou paměťové proměnné je položka (field) databázového souboru. S tím rozdílem, že typ a rozměr položky se definuje při tvorbě struktury databázového souboru. Rozměry a typ položky se mění restrukturalizací souboru.

 

Typy údajů

Údaje zpracovávané ve FoxPro mohou být typu:

 

Typ   údaje       česky          použití                 

────────────────────────────────────────────────────────

 C  Character   znakový typ    zápis  krátkých  textů    

 N  Numeric     číselný typ    ekonomické výpočty        

 F  Float       číselný typ    vědeckotechnické výpočty  

 D  Date        datový  typ    počítání časových údajů   

 L  Logical     logický typ    testování a rozhodování   

 M  Memo        univerzální    rozsáhlé texty, obrázky   

 

V dalším textu budou často typy, v souladu s firemní literaturou, určovány pouze prvním písmenem názvu typu.

 

 

Typ Character

Znakový typ C je tvořen jedním znakem nebo řetězcem znaků. Každý znak zabírá l byte paměti. Znakový typ je charakterizován délkou, vyjádřenou počtem znaků (správněji počtem bytů). Maximální délka řetězce je prakticky neomezena. Délka řetězce může být nulová.

Konstanta znakového typu se nazývá znak (character) nebo řetězec (string). Znaková konstanta musí být v programu uzavřena v apostrofech nebo uvozovkách.

Příklady správně zapsaných konstant a proměnných:

 

"Jaroslav Kořínek"

"125"

"A"

'Řekl: "Jsem tady"'                - zde jsou uvozovky součástí řetězce!

"┐ŕ ţŰśöţ ő  ÔÔńń┼┼┼!"     - jsou povoleny všechny znaky ASCII kódu

""                                          -  prázdný řetězec (nulové délky)

a  =  "xxx"                       &&  Proměnná a je od tohoto okamžiku znaková, má délku tři znaky.

Balik = ""                        &&  Proměnná Balik je znaková, ale prázdná.

 

Příklady nesprávně zapsaných konstant:

 

"Stejný znak není na začátku a na konci řetězce'

'Neohraničený řetězec je zdrojem mnoha trápení

 

Typ Numeric

Číselný typ N je tvořen číslicemi. Může obsahovat desetinný znak (standardně tečku, obecně libovolný znak) a unární operátor (znaménko + -). Maximální délka je 20 znaků. Vzhledem k vnitřní přesnosti má význam pouze 16 číslic. Počet desetinných míst včetně desetinné tečky se pokládá za součást délky konstanty (numerického typu).

Příklady:

12

-12345678901234.56

a = 1               &&  Proměnná  a  je  od tohoto okamžiku číselná, má hodnotu 1.

 

Typ Float

Číselný typ F je tvořen mantisou obsahující číslice, desetinný znak (standardně tečku, obecně libovolný znak) a unární operátor (znaménko + -). Dále obsahuje znak desítkového exponentu a exponent s unárním operátorem. Maximální délka 20 znaků. Vzhledem k vnitřní interpretaci (přesnosti) má význam pouze 16 číslic mantisy pro exponent menší (v absolutní hodnotě) 19. Pro větší hodnoty exponentu lze počítat s přesností maximálně 15 platných číslic. Hodnota exponentu může nabývat super astronomických rozměrů. Souvztažnost (kompatibilita) s typem numeric je zajištěna automaticky a není proto programově ošetřována. Konstanta typu F se nazývá číslo v semilogaritmickém tvaru. Používá se často k definování paměťových proměnných.

Příklady správně zapsaných konstant:

 

0.1E

45.3E-12

12345678901234E195

 

Typ Date

Časové informace se vypočítávají v závislosti na aktuálním čase, sledovaném systémovými hodinami, v rozsahu: od roku 100 a až po rok 9999, v číselné soustavě juliánského kalendáře. Datový typ D má vnitřní interpretaci yyyymmdd (8 bytů), kde: yyyy je čtyřčíslí roku (year), mm je dvoučíslí měsíce (month), dd je dvoučíslí dne (day). Standardní vnější interpretace je americká mm/dd/yy. U nás je obvyklejší interpretace německá, ve tvaru dd.mm.yy. Datový typ může mít prázdnou (nedefinovanou) hodnotu. Nastavení požadované interpretace provede příkaz:

 

SET DATE  TO GERMAN

? DATE()        && Funkce Date() vrací aktuální datum

09/08/91          && Dnes je 8.září 1991

SET DATE TO GERMAN

? DATE()

08.09.91

 

Konstanta je v programu zapisována jako datum uzavřené do složených závorek. Ale při zápisu data z klávesnice a ve výstupních informacích se závorky nevyskytují. Příklady správně v programu zapsaných konstant (v německé interpretaci).

 

{12.1.91}         &&  -  12. ledna 1991

{12.01.91}       &&  -  12. ledna 1991

{..}                   &&  -   nedefinované (prázdné) datum

datum = {..}    && Proměnná datum je od tohoto okamžiku datová, ale prázdná.

dnes = date()  && Proměnná  dnes  obsahuje dnešní datum

 

Typ Logical

Logický typ L obsazuje jeden byte. Hodnotou konstanty je:

T   pravda   (True ), v programu se zapisuje .T.

F   nepravda (False), v programu se zapisuje .F.

 

Typ Memo

Typ memo se vyskytuje pouze jako položka databázových souborů. Jeho použití přesahuje rozsah a poslání těchto skript. Práce s ním bude probírána ve druhé části kursu Programování FoxPro 2.0 (pro pokročilé).

 

Pole

Pole (array) je uspořádaná množina prvků - proměnných stejného jména, na které se lze odkazovat numerickým indexem uzavřeným v hranatých nebo kulatých závorkách. Z důvodů lepší čitelnost programu se doporučuje používat hranaté závorky. Před použitím libovolného z prvků pole je nutno pole deklarovat.

Jméno pole je tvořeno maximálně deseti písmeny, číslicemi a znaky podtržení, začínající písmenem. Na velikosti písmen nezáleží, ale nejsou povolena písmena s diakritickými značkami. Jméno pole může být ukončeno kulatými nebo hranatými závorkami, uzavírajícími počty prvků nebo konkrétní indexy prvku. Pokud závorky nejsou u jména uvedeny, pak se jedná o celé pole.

 

Deklarování pole

Deklarace pole je v podstatě pouze definování maximálních počtů jeho prvků v jednotlivých rozměrech pole. Počty prvků se zapisují do hranatých nebo kulatých závorek. Pro deklarování lze použít dvou rovnocenných příkazů (kvůli snadnějšímu zapamatování).

 

DECLARE <pole1> (<výrazN1> [,<výrazN2>]) [,<pole2> (<výrazN3> [,<výrazN4>])]  ..

nebo

DIMENSION <pole1> (<výrazN1> [,<výrazN2>]) [,<pole2> (<výrazN3> [,<výrazN4>]), ...]

 

Příkazy deklarují jedno nebo dvojrozměrné pole paměťových proměnných. Pole je označeno jediným jménem (identifikátorem) a může obsahovat až 3600 prvků. Velikost prvku je max.18 bytů. Při deklaraci pole jsou prvky definovány automaticky jako logické s hodnotou .F., a je proto nutné definovat jejich typ.

 

n = 30

m = 40

....

DECLARE A[20], B(m,n)      && rozměry se zadávají výrazem

A = 0                                      && vynulování celé matice

B[12,7]   =  ""                                  && prvek je typu C

B(20,30)  = 123                      && prvek je typu N

 

Definování pole nebo prvku pole

Typ a rozsah prvku pole jsou definovány hodnotou, která (v daném okamžiku) je v něm uložená. Proto prvek pole může být typu C,N,F,D,L a jeho typ i velikost se může v průběhu výpočtu měnit. Prvky jednoho pole nemusí být stejného typu. Definování se provádí příkazem:

 

STORE <výraz> TO <pole nebo prvek pole> │ <pole nebo prvek pole> = <výraz>

 

Příkaz uloží  hodnotu výrazu do  všech prvků pole nebo pouze do prvku zadaného indexy.

 

DECLARE A[10,10]  && deklarování matice A

A=0                            && vynulování matice A[10,10]

? A[9,10]                   && kontrola zda opravdu  došlo k vynulování všech prvků matice

0

A[1,1]="Tabulka"    && jeden  z prvků  pole změnil  typ, stal se znakovým

?A[1,1]                      && kontrola

Tabulka

?A[3,5]                      && zbývající prvky se nezměnily

0