Práce se soubory a adresáři
Jazyk OPL nabízí pestrou paletu funkcí pro kopírování, přejmenovávání a mazání souborů a adresářů. Soubory je možné kopírovat příkazem COPY, mazat (DELETE) a přejmenovávat (RENAME). Příkazem MKDIR "C:\TMP\AAA" vytvoříme podadresář AAA v adresáři TMP; pokud adresář TMP před tím neexistoval, bude vytvořen také. Adresáře mažeme příkazem RMDIR.PROC vypis: LOCAL s$(255) s$=DIR$("Z:\System\OPL\*.o?h") : REM -- v paměti ROM -- PRINT "Výpis adresáře" WHILE s$<>"" PRINT s$ s$=DIR$("") ENDWH GET ENDP
i%=EXIST(soubor$)
Funkce EXIST slouží ke zjištění, zda daný soubor existuje; pro zjištění obsahu adresáře používáme funkci DIR$ jako v předchozím příkladu. Konečně příkazem SETPATH nastavujeme základní adresář pro soubory programu - pro přístup k souborům v tomto adresáři nemusíme uvádět plnou cestu k souboru.
Otevírat a vytvářet různé soubory se naučíme v příští sérii článků. Pokud volání uvedených příkazů není úspěšné (například pokud je mazaný soubor chráněn proti zápisu), tak uvedené příkazy generují systémovou chybu a provádění programu je předčasně ukončeno. Tomuto chování můžeme předejít vlastním zpracováním chyb pomocí příkazu TRAP nebo ONERR.
Ošetření chybových situací v OPL
V běžícím programu OPL může dojít k chybám, které zastaví běh programu a na displeji zobrazí okno s informací o typu a umístění chyby. K takovým chybám dochází například při pokusu o dělení nulou, není-li nalezena proměnná nebo selže-li nějaký příkaz OPL (například pokud příkaz COPY nenajde soubor, který má kopírovat).
Uživatel však od našeho programu čeká elegantnější chování, než je ukončení programu s chybovou hláškou, kdykoliv dojde k chybě. Proto se musíme pustit do zpracování chyb v našem programu sami. Srovnejte následující dvě procedury, které se pokoušejí kopírovat neexistující soubor:
PROC prvni: COPY "C:\neexistuje","Z:\" GET ENDP PROC druha: TRAP COPY "C:\neexistuje","Z:\" PRINT "Chyba kopírování ("; ERR$(ERR); ")" GET ENDP
Zatímco první procedura skončí s nepěknou systémovou chybovou zprávou, druhá procedura jen vypíše zprávu o chybě na displeji a případně dovolí uživateli dále pokračovat. Druhá procedura nám také ilustruje první způsob zpracování chyb - spornému příkazu (APPEND, BACK, CANCEL, CLOSE, COPY, CREATE, DELETE, ERASE, EDIT, FIRST, gCLOSE, gCOPY, gFONT, gPATT, gSAVEBIT, gUNLOADFONT, gUSE, INPUT, INSERT, LAST, LCLOSE, LOADM, LOPEN, MKDIR, MODIFY, NEXT, OPEN, OPENR, POSITION, PUT, RENAME, RMDIR, UNLOADM, UPDATE nebo USE) předřadíme klíčové slovo TRAP. Pokud tento příkaz vyvolá chybu, tak náš program bude přesto pokračovat a v proměnné ERR bude vrácen kód této chyby.
ONERR navesti:: ONERR OFF
Druhý způsob je pomocí bloku mezi příkazy ONERR a ONERR OFF. Pokud v tomto bloku dojde k chybě, provede OPL program skok na návěští, které bylo uvedeno za příkazem ONERR.
PROC chyba: ONERR chyba PRINT "Dělení nulou = "; 100/0 PRINT "OK" GET ONERR OFF RETURN REM --- Zpracování chyby --- chyba:: PRINT "CHYBA "; ERR$(ERR) GET ENDP