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