VaxNt.PGuide.Příkazy po "do"
Funkce "do" slouží ke zhutnění kódu a k jednořádkovému zápisu mnoha často se opakujících obratů - přiřazení, useknutí,
verifikace a ukončení. Obvykle je tedy v lineárním toku argumentů zleva doprava "užráno" patřičné množství argumentů a
interpretuje se dále. U některých příkazů nedává smyslu pokračovat nebo se vrátit. Například nedává smyslu "rt" nebo
po "jsr" nutno interpretaci ukončit. Je to oprvdu jen pro zkrácení často se opakujícího kódu.
Přikaz je tedy tvaru "do A1,A2,A3,...,Ax". Má ještě alias setup, jiné jméno téhož.
A je proměnná a V je hodnota. Je-li V očekáváno jako char nebo pojmenovaný char, píše se také C místo V. Z důvodů
uniformity je párkrát proměnná zbytečná. napřáklad u konkatenace s mezerou. Pak je nadbytečný parametr označen X.
Zde je nutno dát pozor na to, že tak, jak postupuje interpretace zleva doprava, mohou se měnit i hodnoty užitých
proměnných. Naopak, "do !A1,A2,A3,...,Ax" vezme pro substituci za znakem ! právě aktuální hodnoty.
Kód se díky substitucím může stát nepredikovatelným tam, kde se do proměnných cpou čárky apod. Proto u složitějších
příkazů je možno s výhodou použít i nepřímou referenci, která se substitucí méně poškozuje. Zde @A je vlastně
uložená v A. Je možno ji referencovat i jako $(A). Avšak u "do" se předpokládá dlouhý řádek a je-li v A hodnota
obsahující čárku, může to pak interpretaci rozházet. U jednotlivých příkazů se nanejvýš rozhodí interpretace jednoho
příkazu. Ale u "do" to může mít dalekosáhlé následky.
Paste - funkce spojující dva stringy buď pomocí CrLf nebo \n - to podle toho, zda se hodnota ukládá či ne. Varianta s
otazníkem ignoruje prázdný string.
Všechny do-příkazy jsou motivovány jediným - maximální snahou o zhutnění kódu a často obsahuje do i dosti absurdní
příkazy. Jde o to, aby se opakované věci daly vyřešit na jednom řádku. Je to možné také zavedením knihovní funkce. Ale
zhutnění pomocí do se ukázalo jako nejproduktivnější. Kód je zhuštěn a přtom je v případě potřeby hned po ruce.
Command Synopsis Příklad
------------------------------------------------------------------------------------------------------------------
Práce s časem, datumem apod:
DateTime A - naplní další atom na řádku hodnotou DateTime do DateTime,DT
ServerTime A - naplní další atom na řádku hodnotou času na serveru do DateTime,DT,ServerTime,DS
Computer A - naplní další řádek jménem počítače
Today A - naplní další atom na řádku hodnotou Today ve tvaru YYYYMMDD
DefaultToday A - provede Today pokud je hodnota následující proměnné prázdná
Yesterday A - naplní další proměnnou hodnotou Yesterday ve tvaru YYYYMMDD
Yesterday7 A
Yesterday2 A
Yesterday3 A
Yesterday4 A
Yesterday5 A
Yesterday6 A
Yesterday14 A
Yesterday30 A
Yesterday60 A
Yesterday90 A
Yesterday180 A
Yesterday360 A
Yesterday365 A
Yesterday730 A
Tomorrow A
TimeNow A - naplní časem ve formátu HHMMSS
TimeNowHHMM A
TimeNowCz A - čas je ve formátu HH:MM:SS
TodayCz A - den je DD.MM.YYYY
JustNowCz A - stamp je ve formátu DD.MM.YYYY HH:MM:SS
JustNow A - stamp je ve formátu YYYYMMDDHHMMSS
PrevMonth A - nastaví do A hodnotu ve tvaru YYYYMM
PrevMonthFirst A - nastaví do A hodnotu ve tvaru YYYYMMDD
PrevMonthLast A
PrevWeekMonday A - nastaví hodnotu podle dneška
PrevWeekXMonday A1,A2 - do A1 dá relativní hodnotu podle A2, A2 může být i tvaru @B, tedy nepřímá reference
WeekOf A1,A2 do A1 dá číslo odpovídajícího týdne, A2 zase může být i nepřímá reference
PrevWeekSunday A
PrevWeekXSunday A1,A2
ThisWeekMonday A
ThisWeekXMonday A1,A2
ThisWeekSunday A
ThisWeekXSunday A1,A2
ThisWeekNumber A a řídí se přes Now na daném PC
_yyyymmdd @V,A - vezme hodnotu na řádku, případně ji dereferencuje a převede YYYYMMDD na DD.MM.YYYY a uloží do A
yyyymmdd dtto
tomorrow A,V - posune datum z A o udaný počet dnů
yesterday A,V - posune datum z A o udaný počet dnů
ddmmrr A1,A2 - udělá transformaci YYYYMDD na DDMMYY
hhmm A1,A2 - povede konverzi HHMM na HH:MM
d.m.yyyy2yyyymmdd A1,A2 - do A2 dá zkonvertovanou hodnotu z A1, konverze je D.M.YYYY na YYYYMMDD
d.m.yyyy Dtto
rmq A1,A2,A3,A4 - v A1 se čeká datum ve tvaryu YYYYMMDD a vrací se A2 jako rok, A3 jako měsíc a Ač jako kvartál
Uživatel PC:
User A - různé varianty uživatele podle způsobu přihlášení k aplikaci
LoggedUser A
WindowsUser A
Generování identifikátorů:
Generate A - naplní stampem a k tomu připojeným náhodným stringem
GenId16 A - dtto a usekne výsledek na 16 znaků
Plnění jmény adresářů:
Param A - naplní různými adresaři, zde parametry
ParamDir A - alias za Param
ParDir A - dtto
EmailDir A
SetsDir A
PrgDir A
LogDir A
DocDir A
PicDir A
XmlDir A
RootDir A
TmpDir A
NetTmpDir A
DataDir A
ExportDir A
DailyDir A
Plnění jmény souborů, aliasů apod:
VaxNtPath A
VaxNtName A
AliasName A
Banální transformace a linearizace zápisu:
Nop - žádná operace, typicky jen pro zvýšení čitelnosi vydatného kódu
NumericPrefix A1,A2 - vezme numerický prefix z hodnoty proměnné A1 a uloží to do proměnné A2
UpperCase A
LowerCase A
SplitByDot A1,A2,A3 - vezme hodnotu z A1 případně nepřímo referencovanou. Rozdělí ji pomocí tečky na dvě časti a ty uloží do A2 a A3
append.c A1,V2 - k hodnotě v A1 apenduje V2
append.v A1,A2 - dtto, ale appenduje hodnotu uloženou a A2
upper A
lower A
remove.undesired A,V - z hodnoty uložené v A vyháže zakázané znaky a vrátí zpět do A
slashes A - všechny možné slashe a backslashe nahradí za /
backslashes A - dtto nahradí za \
pad A,V - doplní nuly zleva
spad A,V - doplní mezery zleva
wide A,V - doplní zprava
unczech A - odčeští string
tail A,V - do A dá zpět posledních V znaků
trailing.chars.out A,C - do A dá zpět osekáno zezadu a vyhazuje se pojmenovaný znak z V
eliminate A,V - vezme hodnotu z A a vyhazuje z ní V, dokud to jde a vrátí do A to, co zůstane
substr A1,A2,V1,V2 - do A1 vrátí substring A2 začínající na V1 a V2 dlouhý
trump A,V - je-li v A prádno, naplní jej V
chop A,V - usekne hodnotu v A na délku z konstanty V
set A,V - do A dá V
set@ A1,A2 - do A1 dosadí hodnotu referencovanou případně A2 via fAt
clear Vymaže všechny hodnoty
clear.except A - vymaže všechno krom uvedeného v A a to je středníky delimitovaná konstanta
use Vezme předávané hodnoty z view, nad kterým je volaná
use.ifvoid A - pokud je hodnota uložená v A prázdná, pak vezme předávaná hodnoty
have.or.return A - vezme hodnotu uloženou v A a je=li tato prázdná, pak skončí s hodnotou 0
use.the A - do A dá předávanou hodnotu A
unless Povolí unless klauzuli
clear.hidden.strings Vymaže všech 16 skrytých stringů
quit V - skončí s hláškou V
_quit Dtto
quit.ifvoid A,V - skončí s hláškou V za podmínky, že v A je prázdno
quit.iffvoid Dtto
save A - schová hodnotu obsaženou v A
restore A - zrestauruje hodnotu A podle předešlého save
my.save A - dtto uschová jinde
my.restore A - dtto zrestauruje odjinud
exit V - provede "exit" z interpretace a vrátí naznačenou hodnotu (a tím pádem ukončí do ...)
return Provede exit 0 (a tím pádem ukončí do ...)
goto V - skočí na udané návěští (a tím pádem uko
goto@ A - skočí na nepřímo adresované návěští
return.ifvoid A - udělá return, je-li daná proměnná prázdná
call A - udělá ekvivalent "call A"
fms.step A - udělá jeden krok definice formu
setv A1,A2 - dosadí do A1 hodnotu nalezenou v A2
inc A - inkrementuje danou proměnnou
++ A - dtto
dec A - dekrementuje danou proměnnou
-- A - dtto
trim A - oseká danou proměnnou
push A - provede jeden push
pop A - provede jeden pop
_return vrátí se jako se subroutine a tím pádem ukončí interpretaci do
rt dtto
kkk Nastavi proměnná KdoZapsal a spol
xxx Dtto pro proměnné XWho a spol
xxxkkk Provede obojí
exit.ifvoid A - otestuje A a je-li to prázdné, pak exit 0
trump A,V - trumfne hodnotu v A, ale jen kdyz ve V neprázdná
common A,V - v hodnotě V se hledá get, put nebo clear a podle toho se udělá operace s contextem XCommon
default A,V - naplní defaultem, je=li hodnota A prázdná
defaultv A1,A2 - vezme default z proměnné A2
on.error.goto V - při chybě skočí na V
on.success.goto V - skočí na V, pokud naopak k chybě nedošlo
numbers A - v A ponechá jen znaky odpovídající číslu (0123456789.,+-)a čárku nahradí tečkou
length A1,A2 - do A2 dá délku hodnoty z A1
suffix.v A1,A2 - do A1 dá konkatenaci hodnot z A1 a A2
suffix.c A,V - dtto, ale konkatenuje konstantu V
suffix.space A,X - konkatenuje mezeru
suffix.comma A,X - dtto s čárkou
prefix.v A1,A2 - přidává zleva, tedy ze začátku
prefix.c A,V - dtto, ale konkatenuje konstantu V
prefix.space A,X
prefix.comma A,X
utf8.to.win1250 A1,A2 - vezme hodnotu z A1, zkonvertuje ji a pak uloží do A2
last.part A1,A2 - hodnotu z A1 zkracuje zepředu, dokud tato obsahuje mezeru. Výsledek dá do A2
getsql.or.break Ukončí řádek a chová se jako ?getsql break
?getsql Dtto
Složité operace:
GrepOut A1,A2 Vezme hodnotu z A1') then
GetSelectedRows A1,A2 - šíleně složité ... jestliže je voláno nad pohledem, vezme to zaškrtnuté řádky na nahradí v nich nejprve ; za | a
pak | za CrLf. Do A2 soupne počet provedených substitucí a do A1 celý získaný seznam. Je-li A1=ConstructedList tak místo toho
naplní tuto systémovou proměnnou.
Paste A1,A2 - Vezme z A1 string a ten pastne pres hodnotu A2 a výsledek uloží do A1
Paste? A1,A2 - totéž za podmínky, že hodnota uložená v A2 je neprázdná
PasteAndPref A1,A2,A3 - do A1 dosadí hodnotu získanou pomocí Paste a to hodnotou v A1 nad konkatenací hodnot A3 a A2
PasteAndPref? A1,A2,A3 - dtto když hodnota A2 je neprázdná
format A1,A2,A3 - zformátuje string, A2 může být i nepřímo adresováno
Global V1,A2 - Vezme hodnotu dalšího atomu, obalí jej $( a), vyřeší to jako globál a vzniklý string uloží do A2
flip.flop.chars A,C1,C2,C3 - A je hodnota, C1, C2 a C3 pojmenované znaky. Projde hodnotu v A a nahradí C1 buď C2 nebo C3 a vždy se přitom přepne.
začíná se s C2 a výsledek se pak vrátí do A.
percent A1,A2,A3 - uloží do A1 hodnotu jako procenta V1 z V2
percent.comma Dtto. jen oddělovač desetinných míst je čárka
percent.round Dtto a procenta zaokrouhlí na celá čísla
version.info A - uloží informaci o verzi SW
!!! split.pair A1,A2,A3,A4 - vezme hodnotu z A1 a rozdělí ji na číslice, ne-číslice a pak zase číslice.
Tři výsledky dá do A2, A3 a A4.
day.name.abbr A1,A2,A3,V - v A1 se očekává datum, do A2 a A3 se vrací číslo dne v týdnu a jeho jméno, česky pokud je V cz nebo CZ
arglist V1,V2,A1,A2 - provede náhrady atd podle schématu"
V1 je change
V2 je commas - do A1 dá dodnotu z A2, kde všechny výskyty ' jsou nahrazenu čárkou
V2 je pipes - dělá to obráceně
!!! V1 je set - vezme hodnotu V2 a v A2 čeká řadu jmen proměnných, do kterých narve V2
V1 je default - udělá totéž, ale dosadí jen do prázných
Získání či nastavení všemožných proměnných:
GetFormCurrentItem A1,A2 - naplní A1 hodnotou @wCurrentItem a A2 @@wCurrentItem, používá se pro zjednodušení skriptů při volání z formulářu
GetSwitch A1,A2 - do A2 dá hodnotu uvedeného switche z A1, rozumí se z command line či vlastností aplikace = cíl.
GetSwitchQ - Vezme hodnotu switche Q a celou ji chápe jako A1=V1,...,Ax=Vx a provede odpovídající přiřazení. Pouzívá se pro import
nějakých hodnot až při spuštění.
CurrentSwitchU A - naplní podle aktuální hodnoty, což je typicky hodnota swiche U
LofCurrentSwitchU A - dtto, jen se liší case
AsyncLevel A - naplní A danou hodnotou
ScriptLevel A - dtto, hodnota je zanoření interpretace skriptů
clear.shorts - vyprázdní "krátké" proměnné tvaru A,A01,...,Z99
fms.name A - do hodnoty FormName dá následující atom z rádku
ThisProgramName A - do A nasadi jméno aktuálního skriptu
ThisScriptName A dtto
GetSwitch A1,A2 - do A1 dá hodnotu switche z A2
VersionSW A - dosadí verzi do A
CompanySW A
CopyrightSW A
CopyRightAuto A
ThisViewSql A - dosadí do A SQL query, nad kterým je ev. volána
*^* ???
global.get A1,A2 - Nastaví A1 podle toho, co je v A2:
GlobalKey
GlobalScratch
WizardKeyHandler
global.set A1,A2 - Vezme hodnotu obsaženou v A2, případně je dereferencuje a podle toho. co je a A1 to nastaví:
GlobalKey
GlobalScratch
WizardKeyHandler
_dateslashchar V - nastaví DateSlashChar
dateslashchar V - dtto
autosize V - nastaví globální proměnno GlobalAutosize
PrevKeys A - vrazí obsah A do globální proměnné PrevKeys
Privilege A - vrátí privilegium usera:
RUser
WUser
DAdmin
SAdmin
Nobody
Parameter V,A - Do A dosadí hodnotu z parametrů A a všechny slashe dá do unixové podoby
KeyDebug V - nastaví globální debugování kláves
nospacing Nastaví spacing na prázdno
_cache.clear Vymaže vyrovnávací paměť
cache.clear Dtto
fms.buttons Řekne, že se mají ve formuláři ukazovat buttony na tisk apod.
GlobalViewItem A - nastaví proměnnou GlobalViewItem, je to typicky a implicitně jméno aktuálního sloupce v pohledu
set.success Nastaví CC na true
set.error Nastaví CC na false
fms.prepare V - vyčistí vše a připraví se na definování formu ve V
fms.ready V - řekne. že form V je hotov
Práce se soubory a jejich jmény:
fsplit A - rozdělí jméno souboru a výsledek uloží do proměnných:
_FilePath
_FileBaseName
_FileExt
_FileName
ferase V1,V2 - smaže seznam souborů V2 z adresáře V1
f.close uzavře pracovní soubor f - typicky na zápis
g.close uzavře pracovní soubor g - typicky na čtení
f.create V - vytvoří f na zápis a exitne s hláškou, když to nejde
f.append V - dtto, ale appenduje to
g.open V - totéž pro g, ale na čtení
rm V - smaže soubory a directory si domyslí
view.inner V - vyvolá viewer na udaný soubor
viewer.inner dtto
view V - vyvolá lepší viewer na udaný soubor
viewer dtto
subst V1,V2 - provede substituci
subst.xml dtto a zakóduje vadící znaky
subst.xml.cdata dtto, ale sekci CDATA nezakóduje
Práce s tabulkami:
try.update V - selfexplanatory
try.insert V
try.delete V
try.insert.or.update V
update V - crashne, když se to nepovede
insert V - dtto
worktable.reset Resetuje pracovní tabulku
lk V1,V2 - načte z tabulky V1 hodnotu podle stringového klíče V2. V2 se bere jako jméno a
po druhé se bere hodnota
lki Totéž pro číselný klíč
Vypisování do logů a debugování:
dump V - vydumpuje aktuální context pod udaným jménem
dump.prg Vydumpuje akorát jméno programu
debuglevel V - nastaví debuglevel podle udané konstanty
nodebug V - nastaví DebuggingAllowed:=NextAtom='1'
Potvrzování a dotazování:
confirm V - potvrdí V a jinak skončí s kódem 2
confirm.twice V - dvakrát potvrdí
ask.ifvoid A1,V2 - pokud je hodnota A1 prázdná, pak se zeptá na její hodnotu. Kdyý je hodnota XY, pak provede exit 0
ask.iffvoid dtto
show.message V - ukáže hlášku
show.message.exit V - ukáže hlášku a skončí skript
Pseudonáhodná čísla:
randomize Zavolá Randomize a tím inicializuje generátor náhodných čísel
random Do vnitřní proměnné RandomString uloží hodnotu Random mod 4096
GetRandom A,V1,V2 - do A dosadí hodnotu V1 plus Random(V2)
rnd A - nastaví do A náhodný string
Připojování k databázi:
connect V - přijpojí se k databázi, bez parametrů se vrátí k defaultu. Platí pouze v rámci daného skriptu a automaticky se pak ukončí
Plnění proměnné znaky, které se špatně píšou nebo jsou frekventní:
void A - vyprázdní danou proměnnou
comma A - naplní čárkou
dot A - naplní tečkou
semicolon A - naplní středníkem
colon A - naplni dvojtečkou
colon.space A - naplní ': '
zero A - naplní nulou
space A - naplní mezerou
one A - naplní jedničkou
two A - naplní dvojkou
Dollar A - dosadí do A konstantu $
Space A - dosadí do A mezeru
Chr A1,A2 - dosadí do A2 hodnotu Chr(IntOf(A1))
be.hash A - do A dá konstantu #